2016-03-01 180 views
1

我有一個我編寫的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 ..)似乎不起作用。

任何人都可以提出差異以及如何解決和/或調試? 謝謝

回答

0

按我上面註釋餛飩:

從我作爲root運行控制檯(所以完全特權)。我認爲我的PHP腳本將作爲服務器上的「apache」用戶運行?

這是我相信的問題:我查看了Circlestar目錄權限,其中Tiff_3_to_BMP_5_.lut文件存在。當從控制檯以root身份運行時,CircleStar有rw-r--r--(0644)這允許我的convert3to5程序找到並打開Tiff_3_to_BMP_5_.lut文件就好了。然而,不是PHP exec(...)一旦我將CircleStar上的特權更改爲rwxr-xr-x(0755)PHP exec(...)運行良好!

所以最終這是一個權限問題。

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

感謝您的信息;我解決了這個問題。從控制檯我運行登錄作爲根(如此完整的特權)。從我的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(...)運行良好! –

+0

很高興你知道了! – wonton