Monthly Archives: August 2014

PHP getting parse error: syntax error after uploading file with Filezilla

I wasted about an hour with this issue today so hope to save time for someone else or even me in the future by posting it here. I completely debugged a file in PHP, but kept getting errors in PHP saying that there was a syntax or parse error of some sort or another.

The Solution:

The solution was to simply go to FileZilla and use the top toolbar to navigate to Transfer/Transfer type/binary and problem solved! You can read on if you wish, but if you just want to fix it and continue working as I often do, feel free and stop reading here.

Here is an excerpt I got from http://stackoverflow.com/questions/5704224/php-parser-error-when-viewing-same-file-saved-in-windows:

I have a PHP file for my website, index.php, which, as it stands on the server, it works correctly, no errors triggered and the page loads as it should.

The server is a Linux server running Apache, and my local machine is a Windows machine. Using the FileZilla Windows client, I download index.php and open the file in Notepad++ in Windows. I save this file in Windows, and then upload and overwrite the file on the server. The page now does not load, with this error on the page:

Parse error: syntax error, unexpected $end in /path/to/my/site/index.php on line 1

I've Googled this error quite a bit, and all of the answers I've come across detail that it's either a PHP short tags problem (replacing <? with <?php, but the file does not include any short tags) or a stray bracket somewhere in the file (but I've checked and all brackets are correctly matched). Besides, I do not touch the source itself, and simply save the file after opening it, so since it works before but not after the local Windows save, I have to believe it's a line-ending problem between Windows and Unix.

What is even more puzzling is that I was able to create a test.php that just called phpinfo(), and saved it in Windows and uploaded, and the page correctly loads when I call it from within my web browser. The problem must be related to how Notepad++ translates a non-Windows created file with Unix or Mac-based line-endings to Windows line-endings, and it somehow gets clobbered.

Any ideas? I'll try to provide more information if I've omitted anything, but I really don't think the source is required here.

asked Apr 18 '11 at 14:17
Mattygabe
98711329
1
Reproduce the problem with an as simple source file as possible. Once you've done that and still can't see anything wrong, look at the file in a hex editor to see exactly what is going on. You seem to be contradicting yourself in that you assume it is related to Notepad++ but at the same time claim the file is unmodified. If you have modified it with Notepad++, the first thing that comes to mind is a hidden unicode watermark at the beginning of the file (which you'll definitely see with a hex editor). Good luck! –  gamen Apr 18 '11 at 14:41
@gamen thanks for the response, and while I was thinking the same thing that it was somehow a hidden character like the unicode watermark, I checked and there was no such thing. Notepad++ was correctly saving the file, the issue is how Filezilla was transferring the file (as ASCII instead of Binary). Thanks for the help! –  Mattygabe Apr 18 '11 at 14:47

1 Answer

up vote 1 down vote accepted

Try setting transfer type to BINARY instead of TEXT in your filezilla client. This might be an issue with transfer encoding rather than notepad++ as I have faced a similar problem earlier which was resolved by forcing transfer to binary.

answered Apr 18 '11 at 14:40
That was the issue! FileZilla was set to "Auto", so at some point it must've been choosing "ASCII" instead of "Binary" when transferring files, and that was where the file was getting clobbered at. Great catch! –  Mattygabe Apr 18 '11 at 14:45
Godaddy FTP

How to Download Godaddy or Tdnam.com Domain Lists

I build a lot of apps for SEO people and Domainers, both are interested in doing various things with lists of domain names, especially domainers or domain name buyers. Before today, I never knew how to get names from tdnam.com(which simply forwards to https://auctions.godaddy.com/) without using some crazy screen scraping techniques because normal HTML scrapers will not work as the page is created on the fly with Ajax or something similar. Today I found out that Godaddy has an FTP link accessible from Firefox browsers that contains zip files containing all of their domain name lists! Beware that it may not open in other browsers, but the link is ftp://ftp.godaddy.com/ and contains all domain lists from tdnam.com and https://auctions.godaddy.com/, so you can imagine that this was quite a find for me! Good luck and I hope this helps you like it did me.

Link to download .zip files containing all Godaddy domain lists:

ftp://ftp.godaddy.com/

Connecting to Godaddy with FTP

Amazingly enough, I was also able to figure out how to connect to the directory that holds all of Godaddy's domain lists using FTP client FileZilla. Here is how:

  • For host enter: ftp.godaddy.com
  • For protocol, leave regular FTP selected.
  • For encryption select: use plain FTP
  • Logon type is: Normal
  • User name is: auctions
  • Leave password blank
  • Click "Connect" and it should work!

 

How to Use Old Skype Version on Windows 8

I finally started using Windows 8 today as it seems like its not going away after all, lol. There are a lot of different features to get used to. Skype, for one, doesn't work like I'd like it to at all. Skype is an app in Windows 8 that came with my laptop and it functions more like a mobile app than an app for a computer. It wouldn't let me click and drag a file into a conversation to send that file to someone I was talking to. It won't let you shrink the window with the exception of using split-screen. These were the main drawbacks to me, so I decided to find out how to use the old non-app version of Skype.

Here's how to Install Skype without an App:

  1. Go to your windows main screen and click on the Gear icon which is the PC Settings app.
  2. Click on "Search and apps" link in the left column.
  3. Click on "App sizes" in the left column.
  4. Find Skype in the App sizes dialog to the right and left click it then click on "uninstall".
  5. Go to http://www.skype.com/go/getskype-msi to download the desktop version of Skype which is not the app!
  6. Find where your file downloaded and click on the skype icon for setting it up.
  7. Follow the on-screen instructions to install the old version of Skype and you're in business!

Summary

So, as you can see, it's not too difficult to get your old Skype back. The instructions above are really easy to follow, so give it a shot. The higher level instructions would be to simply uninstall Skype app and install the desktop version of skype from http://www.skype.com/go/getskype-msi. Good luck!

Keep Search Engines from Indexing a Webpage

To prevent most search engines from indexing a page on your site, place the following meta tag into the <head> section of your page:

<meta name="robots" content="noindex">

To only prevent Google  from indexing your page use:

<meta name="googlebot" content="noindex">

Get Execution Time of PHP Script

Here is how you can report how long it take a PHP script to run:

$starttime = microtime(true);

echo "<p>Start time: $starttime</p>";
sleep(3);

$endtime = microtime(true);
echo "<p>End time: $endtime</p>";
//execution time of the script
$execution_time = ($endtime - $starttime);//gets run time in secs
$execution_time = round($execution_time,2);//makes time two decimal places long
echo '<b>Total Execution Time:</b> '.$execution_time.' Secs';

Dynamically Click on a Button with JavaScript

Today I ran into a case where I needed to emulate a button click. How did I imitate a button click? Here is how I did it with a little JavaScript and the click function.

Emulate Button Click with JavaScript

Imagine you have a button with the id of mybutton:

document.getElementById('mybutton').click();

The above JavaScript line will click on that button. What I needed to do is to have a button clicked when someone clicks on a div. Note that it could be any element that is clicked on such as another button or even an image. I did this:

<div style="width:400px;height:225px;border:1px solid red;" onclick="document.getElementById('buttonb').click();" />Click on this div to click the submit button...</div>

<input type="submit" id="buttonb" name="buttonb" value="" />

In the above example, when the user clicks on the div that says "Click on this div to click the submit button...", the submit button is clicked and whatever form it goes to is submitted. There are various reasons why you might need to use this trick and it is a good one to have in your bag. Notice I added styles to the div to make it visible.

Commands for SED, Unix Stream Editor

What is SED?

"SED" stands for Stream EDitor. SED is a non-interactive editor useful from the Unix command line or for cron jobs I have found. Instead of altering a file interactively with a word processor, the user sends a script of editing instructions to SED along with the name of a file to edit. The text to be edited may also come as output from a pipe. SED works like a filter deleting, inserting and changing characters, words, and lines of text. It is capable of small changes and very complex changes to a file or text. Sed is often used as a find-and-replace tool.

Example SED Commands

Here is collection of one line scripts for SED (Unix stream editor) originally compiled by Eric Pement. I included this in my blog because I have found it a useful edition to my server admin category. SED can be used to do some pretty neat things such as using SED with a cron job to make regular changes to a CSS or .txt file or even HTML!

FILE SPACING:

# double space a file
sed G

# double space a file which already has blank lines in it. Output file
# should contain no more than one blank line between lines of text.
sed '/^$/d;G'

# triple space a file
sed 'G;G'

# undo double-spacing (assumes even-numbered lines are always blank)
sed 'n;d'

# insert a blank line above every line which matches "regex"
sed '/regex/{x;p;x;}'

# insert a blank line below every line which matches "regex"
sed '/regex/G'

# insert a blank line above and below every line which matches "regex"
sed '/regex/{x;p;x;G;}'

NUMBERING:

# number each line of a file (simple left alignment). Using a tab (see
# note on '\t' at end of file) instead of space will preserve margins.
sed = filename | sed 'N;s/\n/\t/'

# number each line of a file (number on left, right-aligned)
sed = filename | sed 'N; s/^/ /; s/ *\(.\{6,\}\)\n/\1 /'

# number each line of file, but only print numbers if line is not blank
sed '/./=' filename | sed '/./N; s/\n/ /'

# count lines (emulates "wc -l")
sed -n '$='

TEXT CONVERSION AND SUBSTITUTION:

Find and Replace

Find and replace "foo" with "bar" on each line
sed 's/foo/bar/' # replaces only 1st instance in a line
sed 's/foo/bar/4' # replaces only 4th instance in a line
sed 's/foo/bar/g' # replaces ALL instances in a line
sed 's/\(.*\)foo\(.*foo\)/\1bar\2/' # replace the next-to-last case
sed 's/\(.*\)foo/\1bar/' # replace only the last case

Substitute "foo" with "bar" ONLY for lines which contain "baz"
sed '/baz/s/foo/bar/g'

Substitute "foo" with "bar" EXCEPT for lines which contain "baz"
sed '/baz/!s/foo/bar/g'

Change "scarlet" or "ruby" or "puce" to "red"
sed 's/scarlet/red/g;s/ruby/red/g;s/puce/red/g' # most seds
gsed 's/scarlet\|ruby\|puce/red/g' # GNU sed only

UNIX ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
sed 's/.$//' # assumes that all lines end with CR/LF
sed 's/^M$//' # in bash/tcsh, press Ctrl-V then Ctrl-M
sed 's/\x0D$//' # works on ssed, gsed 3.02.80 or higher

UNIX ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$/`echo -e \\\r`/" # command line under ksh
sed 's/$'"/`echo \\\r`/" # command line under bash
sed "s/$/`echo \\\r`/" # command line under zsh
sed 's/$/\r/' # gsed 3.02.80 or higher

DOS ENVIRONMENT: convert Unix newlines (LF) to DOS format
sed "s/$//" # method 1
sed -n p # method 2

DOS ENVIRONMENT: convert DOS newlines (CR/LF) to Unix format
# Can only be done with UnxUtils sed, version 4.0.7 or higher. The
# UnxUtils version can be identified by the custom "--text" switch
# which appears when you use the "--help" switch. Otherwise, changing
# DOS newlines to Unix newlines cannot be done with sed in a DOS
# environment. Use "tr" instead.
sed "s/\r//" infile >outfile # UnxUtils sed v4.0.7 or higher
tr -d \r outfile # GNU tr version 1.22 or higher

Delete leading whitespace (spaces, tabs) from front of each line
# aligns all text flush left
sed 's/^[ \t]*//' # see note on '\t' at end of file

Delete trailing whitespace (spaces, tabs) from end of each line
sed 's/[ \t]*$//' # see note on '\t' at end of file

Delete BOTH leading and trailing whitespace from each line
sed 's/^[ \t]*//;s/[ \t]*$//'

Insert 5 blank spaces at beginning of each line (make page offset)
sed 's/^/ /'

Align all text flush right on a 79-column width
sed -e :a -e 's/^.\{1,78\}$/ &/;ta' # set at 78 plus 1 space

Center all text in the middle of 79-column width. In method 1,
# spaces at the beginning of the line are significant, and trailing
# spaces are appended at the end of the line. In method 2, spaces at
# the beginning of the line are discarded in centering the line, and
# no trailing spaces appear at the end of lines.
sed -e :a -e 's/^.\{1,77\}$/ & /;ta' # method 1
sed -e :a -e 's/^.\{1,77\}$/ &/;ta' -e 's/\( *\)\1/\1/' # method 2

Reverse order of lines (emulates "tac")
# bug/feature in HHsed v1.5 causes blank lines to be deleted
sed '1!G;h;$!d' # method 1
sed -n '1!G;h;$p' # method 2

Reverse each character on the line (emulates "rev")
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'

Join pairs of lines side-by-side (like "paste")
sed '$!N;s/\n/ /'

If a line ends with a backslash, append the next line to it
sed -e :a -e '/\\$/N; s/\\\n//; ta'

If a line begins with an equal sign, append it to the previous line
# and replace the "=" with a single space
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'

Add commas to numeric strings, changing "1234567" to "1,234,567"
gsed ':a;s/\B[0-9]\{3\}\>/,&/;ta' # GNU sed
sed -e :a -e 's/\(.*[0-9]\)\([0-9]\{3\}\)/\1,\2/;ta' # other seds

Add commas to numbers with decimal points and minus signs (GNU sed)
gsed -r ':a;s/(^|[^0-9.])([0-9]+)([0-9]{3})/\1\2,\3/g;ta'

Add a blank line every 5 lines (after lines 5, 10, 15, 20, etc.)
gsed '0~5G' # GNU sed only
sed 'n;n;n;n;G;' # other seds

SELECTIVE PRINTING OF CERTAIN LINES

Print first 10 lines of file (emulates behavior of "head")
sed 10q

Print first line of file (emulates "head -1")
sed q

Print the last 10 lines of a file (emulates "tail")
sed -e :a -e '$q;N;11,$D;ba'

Print the last 2 lines of a file (emulates "tail -2")
sed '$!N;$!D'

Print the last line of a file (emulates "tail -1")
sed '$!d' # method 1
sed -n '$p' # method 2

Print the next-to-the-last line of a file
sed -e '$!{h;d;}' -e x # for 1-line files, print blank line
sed -e '1{$q;}' -e '$!{h;d;}' -e x # for 1-line files, print the line
sed -e '1{$d;}' -e '$!{h;d;}' -e x # for 1-line files, print nothing

Print only lines which match regular expression (emulates "grep")
sed -n '/regexp/p' # method 1
sed '/regexp/!d' # method 2

Print only lines which do NOT match regexp (emulates "grep -v")
sed -n '/regexp/!p' # method 1, corresponds to above
sed '/regexp/d' # method 2, simpler syntax

Print the line immediately before a regexp, but not the line containing the regexp
sed -n '/regexp/{g;1!p;};h'

Print the line immediately after a regexp, but not the line containing the regexp
sed -n '/regexp/{n;p;}'

Print 1 line of context before and after regexp, with line number indicating where the regexp occurred (similar to "grep -A1 -B1")
sed -n -e '/regexp/{=;x;1!p;g;$!N;p;D;}' -e h

grep for AAA and BBB and CCC (in any order)
sed '/AAA/!d; /BBB/!d; /CCC/!d'

grep for AAA and BBB and CCC (in that order)
sed '/AAA.*BBB.*CCC/!d'

grep for AAA or BBB or CCC (emulates "egrep")
sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d # most seds
gsed '/AAA\|BBB\|CCC/!d' # GNU sed only

Print paragraph if it contains AAA (blank lines separate paragraphs)
# HHsed v1.5 must insert a 'G;' after 'x;' in the next 3 scripts below
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;'

Print paragraph if it contains AAA and BBB and CCC (in any order)
sed -e '/./{H;$!d;}' -e 'x;/AAA/!d;/BBB/!d;/CCC/!d'

Print paragraph if it contains AAA or BBB or CCC
sed -e '/./{H;$!d;}' -e 'x;/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d
gsed '/./{H;$!d;};x;/AAA\|BBB\|CCC/b;d' # GNU sed only

Print only lines of 65 characters or longer
sed -n '/^.\{65\}/p'

Print only lines of less than 65 characters
sed -n '/^.\{65\}/!p' # method 1, corresponds to above
sed '/^.\{65\}/d' # method 2, simpler syntax

Print section of file from regular expression to end of file
sed -n '/regexp/,$p'

Print section of file based on line numbers (lines 8-12, inclusive)
sed -n '8,12p' # method 1
sed '8,12!d' # method 2

Print line number 52
sed -n '52p' # method 1
sed '52!d' # method 2
sed '52q;d' # method 3, efficient on large files

Beginning at line 3, print every 7th line
gsed -n '3~7p' # GNU sed only
sed -n '3,${p;n;n;n;n;n;n;}' # other seds

Print section of file between two regular expressions (inclusive)
sed -n '/Iowa/,/Montana/p' # case sensitive

SELECTIVE DELETION OF CERTAIN LINES:

Print all of file EXCEPT section between 2 regular expressions
sed '/Iowa/,/Montana/d'

Delete duplicate, consecutive lines from a file (emulates "uniq")
# First line in a set of duplicate lines is kept, rest are deleted.
sed '$!N; /^\(.*\)\n\1$/!P; D'

Delete duplicate, nonconsecutive lines from a file. Beware not to overflow the buffer size of the hold space, or else use GNU sed
sed -n 'G; s/\n/&&/; /^\([ -~]*\n\).*\n\1/d; s/\n//; h; P'

Delete all lines except duplicate lines (emulates "uniq -d")
sed '$!N; s/^\(.*\)\n\1$/\1/; t; D'

Delete the first 10 lines of a file
sed '1,10d'

Delete the last line of a file
sed '$d'

Delete the last 2 lines of a file
sed 'N;$!P;$!D;$d'

Delete the last 10 lines of a file
sed -e :a -e '$d;N;2,10ba' -e 'P;D' # method 1
sed -n -e :a -e '1,10!{P;N;D;};N;ba' # method 2

Delete every 8th line
gsed '0~8d' # GNU sed only
sed 'n;n;n;n;n;n;n;d;' # other seds

Delete lines matching pattern
sed '/pattern/d'

Delete ALL blank lines from a file (same as "grep '.' ")
sed '/^$/d' # method 1
sed '/./!d' # method 2

Delete all CONSECUTIVE blank lines from file except the first. Also deletes all blank lines from top and end of file (emulates "cat -s")
sed '/./,/^$/!d' # method 1, allows 0 blanks at top, 1 at EOF
sed '/^$/N;/\n$/D' # method 2, allows 1 blank at top, 0 at EOF

Delete all CONSECUTIVE blank lines from file except the first 2
sed '/^$/N;/\n$/N;//D'

Delete all leading blank lines at top of file
sed '/./,$!d'

Delete all trailing blank lines at end of file
sed -e :a -e '/^\n*$/{$d;N;ba' -e '}' # works on all seds
sed -e :a -e '/^\n*$/N;/\n$/ba' # ditto, except for gsed 3.02.*

Delete the last line of each paragraph
sed -n '/^$/{p;h;};/./{x;/./p;}'

SPECIAL APPLICATIONS:

Remove nroff overstrikes (char, backspace) from man pages

(The 'echo' command may need an -e switch if you use Unix System V or bash shell)
sed "s/.`echo \\\b`//g" # double quotes required for Unix environment
sed 's/.^H//g' # in bash/tcsh, press Ctrl-V and then Ctrl-H
sed 's/.\x08//g' # hex expression for sed 1.5, GNU sed, ssed

Get Usenet/e-mail message header
sed '/^$/q' # deletes everything after first blank line

Get Usenet/e-mail message body
sed '1,/^$/d' # deletes everything up to first blank line

Get Subject header, but remove initial "Subject: " portion
sed '/^Subject: */!d; s///;q'

Get return address header
sed '/^Reply-To:/q; /^From:/h; /./d;g;q'

Parse out the address proper. Pulls out the e-mail address by itself
# from the 1-line return address header (see preceding script)
sed 's/ *(.*)//; s/>.*//; s/.*[:<] *//' # add a leading angle bracket and space to each line (quote a message) sed 's/^/> /'

Delete leading angle bracket & space from each line (unquote a message)
sed 's/^> //'

Remove most HTML tags (accommodates multiple-line tags)
sed -e :a -e 's/<[^>]*>//g;/zipup.bat
dir /b *.txt | sed "s/^\(.*\)\.TXT/pkzip -mo \1 \1.TXT/" >>zipup.bat

TYPICAL USE:

Sed takes one or more editing commands and applies all of
them, in sequence, to each line of input. After all the commands have
been applied to the first input line, that line is output and a second
input line is taken for processing, and the cycle repeats. The
preceding examples assume that input comes from the standard input
device (i.e, the console, normally this will be piped input). One or
more filenames can be appended to the command line if the input does
not come from stdin. Output is sent to stdout (the screen). Thus:

cat filename | sed '10q' # uses piped input
sed '10q' filename # same effect, avoids a useless "cat"
sed '10q' filename > newfile # redirects output to disk

For additional syntax instructions,  the manual ("man") pages on Unix systems may be helpful. Try "man sed", "man regexp", or the subsection on regular expressions in "man
ed".

QUOTING SYNTAX: The preceding examples use single quotes ('...')
instead of double quotes ("...") to enclose editing commands, since
sed is typically used on a Unix platform. Single quotes prevent the
Unix shell from intrepreting the dollar sign ($) and backquotes
(`...`), which are expanded by the shell if they are enclosed in
double quotes. Users of the "csh" shell and derivatives will also need
to quote the exclamation mark (!) with the backslash (i.e., \!) to
properly run the examples listed above, even within single quotes.
Versions of sed written for DOS invariably require double quotes
("...") instead of single quotes to enclose editing commands.

USE OF '\t' IN SED SCRIPTS: For clarity in documentation, we have used
the expression '\t' to indicate a tab character (0x09) in the scripts.
However, most versions of sed do not recognize the '\t' abbreviation,
so when typing these scripts from the command line, you should press
the TAB key instead. '\t' is supported as a regular expression
metacharacter in awk, perl, and HHsed, sedmod, and GNU sed v3.02.80.

VERSIONS OF SED: Versions of sed do differ, and some slight syntax
variation is to be expected. In particular, most do not support the
use of labels (:name) or branch instructions (b,t) within editing
commands, except at the end of those commands. We have used the syntax
which will be portable to most users of sed, even though the popular
GNU versions of sed allow a more succinct syntax. When the reader sees
a fairly long command such as this:

sed -e '/AAA/b' -e '/BBB/b' -e '/CCC/b' -e d

It is heartening to know that GNU sed will let you reduce it to:

sed '/AAA/b;/BBB/b;/CCC/b;d' # or even
sed '/AAA\|BBB\|CCC/b;d'

In addition, remember that while many versions of sed accept a command
like "/one/ s/RE1/RE2/", some do NOT allow "/one/! s/RE1/RE2/", which
contains space before the 's'. Omit the space when typing the command.

OPTIMIZING FOR SPEED: If execution speed needs to be increased (due to
large input files or slow processors or hard disks), substitution will
be executed more quickly if the "find" expression is specified before
giving the "s/.../.../" instruction. Thus:

sed 's/foo/bar/g' filename # standard replace command
sed '/foo/ s/foo/bar/g' filename # executes more quickly
sed '/foo/ s//bar/g' filename # shorthand sed syntax

On line selection or deletion in which you only need to output lines
from the first part of the file, a "quit" command (q) in the script
will drastically reduce processing time for large files. Thus:

sed -n '45,50p' filename # print line nos. 45-50 of a file
sed -n '51q;45,50p' filename # same, but executes much faster