2

我正在尝试从 PHP 执行我使用 cmake 和 make 命令生成的 c++ 二进制文件。如果我尝试从终端执行相同的命令,一切正常,但从 php 似乎什么都没有发生。我检查了安全模式,它关闭了。我已使用 chmod 授予所有可执行权限。我试过把东西放在同一个文件夹,不同的文件夹。事实上,我已经尝试了我能想到的所有可能的解决方案,但我仍然无法执行这些二进制文件。知道为什么我不能这样做吗?

任何帮助将不胜感激。

提前致谢。

我使用的程序:-

if($dir !== FALSE) {
    $command = "./segmentation.sh $dir->dirname >> $dir->dirname/log"; 
    $output = $this->terminal($command);
    echo $output['output'];
}

终端功能

public function terminal($command)
{
    if(function_exists('system'))
    {
        ob_start();
        system($command , $return_var);
        $output = ob_get_contents();
        ob_end_clean();
    }
    else if(function_exists('passthru'))
    {
        ob_start();
        passthru($command , $return_var);
        $output = ob_get_contents();
        ob_end_clean();
    }
    else if(function_exists('exec'))
    {
        exec($command , $output , $return_var);
        $output = implode("n" , $output);
    }
    else if(function_exists('shell_exec'))
    {
        $output = shell_exec($command) ;
    }
    else
    {
        $output = 'Command execution not possible on this system';
        $return_var = 1;
    }
    return array('output' => $output , 'status' => $return_var);
}

我的 shell 脚本对二进制文件有一个正常的调用,比如

/path/to/folder/binary_file $args

我从我的 shell 脚本中尝试了 echo、ls、mkdir cmd,它运行良好,只是这些二进制文件没有被执行。

4

2 回答 2

0

看起来您的工作目录可能与您想象的不同。

尝试这个:

$path = realpath(dirname(__FILE__) );

$cmd = $path . $command;

并尝试执行该命令(假设 c++ 文件与您正在运行的 php 文件位于同一目录中。

于 2013-03-06T03:24:05.820 回答
0

是 MAMP 导致了这个问题。

如果您像我一样使用 MAMP,那么您必须再执行一件事。

转到菜单->转到文件夹->在文本框中写入“/Applications/MAMP/Library/bin/”->按回车

查找名为“envvars”的文件并使用 # 注释以下行:-

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" 导出 DYLD_LIBRARY_PATH

现在一切都应该正常了。

归功于此博客 - 作者 Jonathon Hill

于 2013-03-06T04:26:16.877 回答