2>&1 arg in exec(perl.... + "sh: /perl not found error" TIA for help
am 07.12.2005 02:14:03 von Marty Meyers
I have the following line in a php file:
$msg= exec("perl $scriptPath/insert.pl $d $u $t 2>&1", $returnVal);
Can someone explain the "2>&1" argument?
Second problem, this same line of code when run from the unix command line
returns the following error:
sh: /perl: No such file or directory
I've verified that perl is located in /usr/bin/
/usr/bin is in the environment variable "PATH"
all the directories from php program to the root and back down to usr/bin
have 755 permissions.
if I run the program (insert.pl) from the command line it works
I've tried putting the following in both the php and perl programs:
#!/usr/bin/perl
#!/usr/bin
Any suggestions would be appreciated.
Thanks
Marty
Re: 2>&1 arg in exec(perl.... + "sh: /perl not found error" TIA for help
am 07.12.2005 02:51:05 von Etienne Marais
Marty Meyers wrote:
> I have the following line in a php file:
>
> $msg= exec("perl $scriptPath/insert.pl $d $u $t 2>&1", $returnVal);
>
> Can someone explain the "2>&1" argument?
Error redirection.
&1 is stdout (standard output stream)
&2 is stderr (standard error stream)
if you do
command | more
and you get valid output, with lines of errors in between the output,
the errors are not piped to more and will mess up the display
unless you do:
command 2>&1 | more
which will work fine.
Or if you do
command > output.txt
output.txt does not contain any errors created(output) by command,
only the normal output of the command.
and
command 2> errors.txt
will contain only errors, none of the normal output.
You can do
command > output.txt 2> errors.txt
to get seperate output for normal and error reports
in two different files
command 2>&1 > output_and_errors.txt
to get all output into one report.
(Which places the errors in the same stream as the normal output,
and then redirects the normal output to output_and_errors.txt)
The reason your exec has 2>&1 is so
that the return value will contain any
possible errors and/or normal output.
If this was not added and if the
perl command should fail, you would
not even have that information in
returnVal.
>
> Second problem, this same line of code when run from the unix command line
> returns the following error:
>
> sh: /perl: No such file or directory
Just checking, are you saying that the
command works fine with:
$> perl insert.pl
but that it does not work from neither
php php_file_containg_exec.php
nor
$> perl $scriptPath/insert.pl $d $u $t 2>&1
Did you substitute $scriptPath; $d and $u with
the relevant values before trying this, or
exactly what did you do ?
--
Etienne Marais
Cosmic Link
South Africa
Re: 2>&1 arg in exec(perl.... + "sh: /perl not found error" TIA for help
am 07.12.2005 13:43:31 von Marty Meyers
Hi Etienne,
Thanks for the detailed explanation of "2>&1". I should have recognized
that from the windows cmd processor which is about the same.
> > $msg= exec("perl $scriptPath/insert.pl $d $u $t 2>&1", $returnVal);
> > Second problem, this same line of code when run from the unix command
line
> > returns the following error:
> >
> > sh: /perl: No such file or directory
>
> Just checking, are you saying that the
> command works fine with:
> $> perl insert.pl
Marty ans: Yes, it works-with args, ie perl insert.pl 28 2
/var/www/....../vehicles.txt
>
> but that it does not work from neither
> php php_file_containg_exec.php
Marty ans: correct, it fails BTW-the php file is ftpupload.php
>
> nor
>
> $> perl $scriptPath/insert.pl $d $u $t 2>&1
Marty ans: Very interesting, using the $scriptPath in the command line
fails. It starts the script(I have a print statement in it) but it does not
run the entire program.
>
> Did you substitute $scriptPath; $d and $u with
> the relevant values before trying this, or
> exactly what did you do ?
Marty ans: ran it two ways (both from command line, ie php ftpupload.php):
I used variables-failed
I used the real values for all variables and changed the double quotes
to single quotes in the ftpupload.php file-Still failed
Marty ans: Thanks
>
> --
> Etienne Marais
> Cosmic Link
> South Africa