2

PHPからcmakeおよびmakeコマンドを使用して生成したc++バイナリファイルを実行しようとしています。ターミナルから同じコマンドを実行しようとすると、すべてが完璧に機能しますが、php からは何も起こっていないようです。safe_modeをチェックしましたが、オフです。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);
}

そして、私のシェルスクリプトには、次のようなバイナリへの通常の呼び出しがあります

/path/to/folder/binary_file $args

シェルスクリプトからecho、ls、mkdir cmdを試してみましたが、これらのバイナリが実行されないだけで完璧に機能しました。

4

2 に答える 2

0

問題を引き起こしたのはMAMPでした。

私のように MAMP を使用している場合は、もう 1 つ実行する必要があります。

メニューに移動->フォルダーに移動->テキストボックスに「/Applications/MAMP/Library/bin/」と入力->Enterキーを押します

「envvars」というファイルを見つけて、次の行に # を使用してコメントを付けます:-

DYLD_LIBRARY_PATH="/Applications/MAMP/Library/lib:$DYLD_LIBRARY_PATH" エクスポート DYLD_LIBRARY_PATH

すべてがうまくいくはずです。

クレジットはこのブログに送られます-著者ジョナソンヒル

于 2013-03-06T04:26:16.877 に答える
0

あなたの作業ディレクトリは、あなたが思っているものとは違うようです。

これを試して:

$path = realpath(dirname(__FILE__) );

$cmd = $path . $command;

そのコマンドを実行してみてください (c++ ファイルが実行中の php ファイルと同じディレクトリにあると仮定します。

于 2013-03-06T03:24:05.820 に答える