【问题标题】:CentOS Linux console command versus PHP exec(command)CentOS Linux 控制台命令与 PHP exec(command)
【发布时间】:2016-06-14 10:25:28
【问题描述】:

我有一个名为convert3to5 的 C 程序,最初是在 2010 年初为 CentOS/Fedora 32 位系统编写的。我将把它移到新的 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

我得到以下 $result:

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

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

为什么当我从控制台提示符运行 convert3to5 而不是从 PHP exec(...) 运行时它找到 Tiff_3_to_BMP_5_.lut 在这两种情况下我的密码都显示我在

[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 ..) 似乎无效。

谁能提出不同之处以及如何修复和/或调试? 谢谢

【问题讨论】:

    标签: php linux apache centos6


    【解决方案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, ..),它的行为应该像控制台一样。

    【讨论】:

    • 感谢您的信息;我解决了这个问题。从控制台我以 root 身份运行登录(如此完整的权限)。从我的 PHP 后端脚本中,我想它以“apache”用户身份运行?这是我认为的问题:我查看了存在 Tiff_3_to_BMP_5_.lut 文件的 CircleStar 目录权限。 CircleStar 从控制台以 root 身份运行时具有 rw-r--r-- (0644),这使我的 convert3to5 程序可以很好地找到 Tiff_3_to_BMP_5_.lut 文件。但是,一旦我将 CircleStar 上的权限更改为 rwxr-xr-x PHP exec(...) 运行良好,PHP exec(...) 就没有了!
    • 很高兴你知道了!
    【解决方案2】:

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

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

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

    所以最终这是一个权限问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-10
      • 2014-02-22
      • 2011-03-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多