0

私は単純な2行のスクリプトを持っています:

<?
        $str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
        exec('phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js ').''.escapeshellarg($str));
?>

コンソールからこれを実行すると、次のようになります。

Can't open '/Users/me/render.js <!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>'

そのため、文字列は本来あるべき引用符で囲まれていません。私はここで何か間違っていますか?システムは OSX 10.7、php 5.3.6 です。

4

2 に答える 2

1

OS X 10.7 の同じ PHP バージョンでこれを試すと、期待どおりに文字列が一重引用符で囲まれます。ただし、期待どおりの結果が得られない場合があります。最初に exec に渡すコマンドをエコーアウトし、そのコマンドを端末にコピーして貼り付けて、機能するかどうかを確認します。そうすれば、問題をよりよく見ることができます。あなたのコードに基づいて私がしたことは次のとおりです。

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
$command = 'phantomjs '.escapeshellarg(dirname(__FILE__).'/render.js ').
           ''.escapeshellarg($str);
echo "$command\n";

私はこれを得た:

phantomjs '/Users/me/render.js ''"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"'

正しいのにまだ機能しない場合は、パスを確認して、ファイルがスクリプトが想定している場所にあることを確認してください。

于 2012-05-18T13:35:39.183 に答える
0

最終的な作業コマンド:

$str = '"<!DOCTYPE><html><head></head><body><h1>FOOO</h1></body></html>"';
$command = 'phantomjs '.dirname(__FILE__).'/render.js '.$str;

exec($command);
于 2012-05-18T14:13:20.150 に答える