我有一个名为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 ..)似乎不起作用。
任何人都可以建议区别以及如何修复和/或调试? 感谢
答案 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执行(...)运行正常!
所以最终这是一个许可问题。