CentOS Linux控制台命令与PHP exec(命令)

时间:2016-03-01 20:08:27

标签: php linux apache centos6

我有一个名为convert3to5的C程序,最初是在2010年初为CentOS / Fedora 32bit系统编写的。我将它移到新的CentOS 6.x 64位系统主机上。

从CentOS Putty控制台我可以正常运行convert3to5命令;这是从我的控制台运行的示例:

[root@cloud convert3to5]# ls
CircleStar  convert3to5  Convert3To5.txt  test.tif 
[root@cloud convert3to5]# ./convert3to5 /var/www/webadmin/data/www/mydomain.com/uploads/SV-DIS160217B.tif  
TIFFReadDirectory: Warning, /var/www/webadmin/data/www/mydomain.com/uploads/SV-DIS160217B.tif: wrong data type 7 for "RichTIFFIPTC"; tag ignored. Image has an undefined fillorder - using default: MSB2LSB 

以上是convert3to5的正常完成情况,我得到SV-DIS160217B.bmp放置在/var/www/webadmin/data/www/mydomain.com/uploads/所以从控制台运行它正常

问题 - 我试图使用exec(command, output, return)命令从PHP运行相同的命令,如下所示:

chdir($sv_path.$c3to5_path);    //change our working directory to "/convert3to5" directory
$command = "./convert3to5 $targetFile 2>&1";
$result = exec($command, $output, $return);
// the output of the above command - is a .bmp file it will be placed in the same path as the input .tif file

我得到以下$结果:

  

错误:无法转换   /var/www/webadmin/data/www/mydomain.com/uploads/SV-DIS160217B.tif to 5   颜色BMP文件:打开文件错误:Tiff_3_to_BMP_5_.lut!

我的convert3to5确实需要打开Tiff_3_to_BMP_5_.lut

为什么在我从控制台提示符运行Tiff_3_to_BMP_5_.lut时找到convert3to5但在两种情况下都没有从PHP exec(...)运行,我的pwd显示我在

[root@cloud convert3to5]# pwd 
/var/www/webadmin/data/www/mydomain.com/myView/convert3to5

之后,我还从PHP脚本验证了pwd是否正确
chdir($sv_path.$c3to5_path);

Tiff_3_to_BMP_5_.lut位于CircleStar目录中 - CircleStar的路径为/var/www/webadmin/data/www/mydomain.com/myView/convert3to5/CircleStar

摘要:./ convert3to5有效,而PHP exec('convert3to5 ..)似乎不起作用。

任何人都可以建议区别以及如何修复和/或调试? 感谢

2 个答案:

答案 0 :(得分:1)

你正在从convert3to5目录运行控制台,我怀疑你的旧C程序使用了.lut文件的相对路径,可能相对于.tif?

如果在控制台示例中你做了什么

cd ../..
./path/to/convert3to5/convert3to5 /var/www/webadmin/data/www/mydomain.com/uploads/SV-DIS160217B.tif

可能与$ targetFile有关。打印出来并查看它是否是完整路径。

最后,运行

/full/path/to/convert3to5 fullTargetPath

如果可以,那么作为一种解决方法,如果您只是exec('/full/path/to/convert3to5 $fullTargetPath, ..),它应该像控制台一样。

答案 1 :(得分:0)

根据我对馄饨的上述评论:

从控制台我以root身份运行(如此完全特权)。我认为我的PHP脚本将作为" apache"用户在服务器上?

我认为这是我遇到的问题:我查看了Tiff_3_to_BMP_5_.lut文件所在的CircleStar目录权限。当从控制台以root身份运行时,CircleStar有rw-r--r--(0644)这允许我的convert3to5程序找到并打开Tiff_3_to_BMP_5_.lut文件就好了。不过PHP exec(...)一旦我将CircleStar的权限更改为rwxr-xr-x(0755),PHP执行(...)运行正常!

所以最终这是一个许可问题。