我有一個我編寫的C程序,名爲convert3to5
,最初是在2010年初爲CentOS/Fedora 32bit系統編寫的。我將它移動到新的CentOS 6.x 64位系統主機。CentOS Linux控制檯命令與PHP exec(命令)
從CentOS Putty控制檯我可以運行convert3to5
命令就好了;這裏是我的控制檯運行它的一個樣本:
[[email protected] convert3to5]# ls
CircleStar convert3to5 Convert3To5.txt test.tif
[[email protected] 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的正常完成,我得到的是被放置在/var/www/webadmin/data/www/mydomain.com/uploads/
所以一個SV-DIS160217B.bmp
從控制檯運行它工作正常。
的問題 - 我試圖使用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
我得到以下$結果:
ERROR: Unable to convert /var/www/webadmin/data/www/mydomain.com/uploads/SV-DIS160217B.tif to 5 color BMP file: Open file Error: Tiff_3_to_BMP_5_.lut!
我convert3to5確實需要打開Tiff_3_to_BMP_5_.lut
爲什麼當我從控制檯p運行convert3to5
時發現Tiff_3_to_BMP_5_.lut
rompt但不能在這兩種情況下我的PWD顯示,我在
[[email protected] convert3to5]# pwd
/var/www/webadmin/data/www/mydomain.com/myView/convert3to5
PHP的exec(...)我也驗證了PWD
chdir($sv_path.$c3to5_path);
Tiff_3_to_BMP_5_後是正確的,從我的PHP腳本。 lut是在CircleStar目錄中 - CircleStar的路徑是/var/www/webadmin/data/www/mydomain.com/myView/convert3to5/CircleStar
摘要:./convert3to5可以工作,而PHP exec('convert3to5 ..)似乎不起作用。
任何人都可以提出差異以及如何解決和/或調試? 謝謝
感謝您的信息;我解決了這個問題。從控制檯我運行登錄作爲根(如此完整的特權)。從我的PHP後端腳本我想它運行爲「apache」用戶?我相信這是我遇到的問題:我查看了Tiff_3_to_BMP_5_.lut文件存在的CircleStar目錄權限。 CircleStar在從控制檯以root身份運行時具有rw-r-r--(0644),這允許我的convert3to5程序找到Tiff_3_to_BMP_5_.lut文件就好了。然而,不是PHP exec(...)一旦我將CircleStar上的特權更改爲rwxr-xr-x PHP exec(...)運行良好! –
很高興你知道了! – wonton