2012-12-06 23 views
1

我想编写PHP脚本,它在Linux机器上执行C++可执行文件。我使用exec()或system()PHP函数。但它不执行C++可执行文件。 我的代码如下。 Proc是编译的C++可执行文件。完全相同的命令在shell中工作正常。在PHP上运行C++可执行文件

echo system('/var/www/image_proc/proc "/var/www/image_proc/images/original/5_1.png" 70 0 0 "/var/www/image_proc/images/processed/5_2.png"'); 

我检查了执行和写入文件的所有权限。我正在使用绝对路径来确保它不是路径问题。

有人知道,有什么可能是一个问题? 任何帮助表示赞赏。

+0

您是否看到错误?或者你只是看不到你期望的输出? –

+0

我没有得到任何错误。 – Karmar

+0

以下工作? <?php error_reporting(E_ALL); ini_set(“display_errors”,1);回声系统(“ls”); ?>如果没有,它显示任何东西? – 2012-12-06 17:32:07

回答

1

我怀疑问题是使用引号。 SHELL可能扩展/评估这些,但是调用system()不会。因此libc system

建议的解决办法是:

<?php 
    error_reporting(E_ALL); 
    ini_set("display_errors", 1); 
    $src = "/var/www/image_proc/images/original/5_1.png"; 
    $dst = "/var/www/image_proc/images/processed/5_2.png"; 
    $cmd = sprintf("/var/www/image_proc/proc %s 70 0 0 %s", $src, $dst); 
    $result = system($cmd, $retval); 
    printf("Result: '%s'\n\nReturn value: %d\n\n", $result, $retval); 
?> 

这既会输出的命令,或一个有用的错误信息的结果。尤为重要的是,这给了我们一个返回值,我们可以根据这个值来找出发生的事情。

+0

感谢您的回答。我也试过这个,但仍然是同样的问题,返回码是127,这意味着system()无法找到可执行文件,但路径是正确的,并且该命令在shell中正常工作。 – Karmar

+1

@Karmar这意味着路径无效。更确切地说,PHP无法看到这条路径。 Apache可能在chroot或其他安全的环境下运行,这会阻止它读取/ var/www/image_proc或(不太可能的原因)添加参数会导致命令失败。我建议从这里开始运行chdir(“/ var/www/image_proc”); (作为$ filename的glob(“*。*”)){ echo $ filename。 “
\ n”; }它会输出/ var/www/image_proc中的所有文件吗?如果没有,这是chroot/security case。 // glob必须包含star-dot-star(*。*)。出于某种原因,它没有正确显示。 – 2012-12-10 02:10:31

+0

@Kamar在回答这个问题后,我应该能够告诉你如何使它工作。 – 2012-12-10 02:16:17

相关问题