ホームページ >バックエンド開発 >PHPチュートリアル >exec を使用して cmd コマンドを実行すると空が返されます

exec を使用して cmd コマンドを実行すると空が返されます

WBOY
WBOYオリジナル
2016-06-23 13:47:262360ブラウズ

swftools の pdf2swf.exe ファイルを Web サイトのルート ディレクトリに置き、exec 関数を使用して php でコマンドを実行しました
$cmd = "c:/php/www/pdf2swf c:/php/www/upload/ 1.pdf c :/php/www/upload/1.swf"
exec($cmd);
このコードをコマンドラインに直接貼り付けると、正しく実行されます。php ではこのように呼び出すことができますが、 exec の最後の 2 つのパラメータが追加されました。2 番目のパラメータは array() で、3 番目のパラメータは失敗しました。その後、変更後、php ファイルをディレクトリに直接配置し、exec(pdf2swf 1.pdf) としました。 1.swf) は正常に実行できますか?理由を教えてください。
注: 上記のコード テストをサーバーに配置すると、すべて Windows 2003、オンライン使用では IIS、ローカル使用では Apache が発生しました。

ディスカッションへの返信(解決策)
まずマニュアルを読んでください

exec() の 2 番目のパラメータは、画面によって返される情報です



まずマニュアルを読んでください。

exec() の 2 番目のパラメータは、画面によって返される情報です。


はい、この配列は空であり、画面には情報がありません。コマンドをコマンドラインに貼り付けて直接実行します

コマンドラインを手動で開くと、システム環境が引き継がれるため、ファイルを直接実行できます
ただし、PHP を使用して実行すると、システム環境を引き継ぐことはできません。したがって、実行可能ファイル (exe など) を指定する必要があります

これはユーザー権限の問題であるはずです
php ファイルをディレクトリに直接置くことは成功します

ただし、明らかに Web モードでは実行されません。 Web サイトのルートを C ドライブのルートに配置します


推奨事項:
Web サイトのディレクトリを D ドライブに移動し、匿名ユーザーに実行権限を付与します
Web サイトを C ドライブに配置しないことで、システム ファイルが誤って破損するのを防ぐことができます。同時に、システムがクラッシュしたときの災害復旧の作業負荷ははるかに小さくなります


コマンドラインを手動で開くと、システム環境が引き継がれるため、ファイルを直接実行できます

ただし、ファイルの実行には PHP を使用しますシステム環境を引き継ぐことはできないので、実行可能ファイル(exeなど)を指定する必要があります


pdf2swfの後に.exeを追加しましたが、まだ実行できません ipconfigを試してみましたが、このコマンドは問題ありません。パスに問題がある可能性があります。パスに問題があるので教えてください。


$mcd = "D:JGYJGY_WEBJGY_PHPinstall_packageapppdf2swf.exe D:JGYJGY_WEBJGY_PHPinstall_packageuploadfile2012122220121222110539946.pdf D:JGYJGY_WEBJGY_PHPinstall_pack ageuploadfile20121222201212221 10539946.swf"
exec($cmd,$out);

これは私の cmd コマンドですが、かなり長いです。教えてください


これはユーザー権限の問題であるはずです php ファイルをディレクトリに直接置くことは成功する可能性があります

ただし、Web サイトのルートを C ドライブのルートに置くことはできないため、明らかに Web モードでは実行できません


提案:
Web サイトのディレクトリを D ドライブに移動し、匿名ユーザーに実行権限を付与します
Web サイトを C ドライブに配置しないことで、システムがクラッシュしたときにシステム ファイルが誤って破壊されるのを防ぐことができます。ディザスタリカバリははるかに小さいです

えー、モデレーター、Web サイトに置きました ルート ディレクトリは C ドライブのルート ディレクトリではありません
D:JGYJGY_WEBJGY_PHPinstall_package これは私の Web サイトのルート ディレクトリです

この下に pdf2swf.exe を置き、次に 1.pdf を配置して、index.php をビルドします
内部のコードは直接 exec(pdf2swf 1.pdf 1.swf) です
これは機能します

次に、次のコード:
$mcd = "D:JGYJGY_WEBJGY_PHPinstall_packageapppdf2swf.exe D :JGYJGY_WEBJGY_PHPinstall_packageuploadfile20121222201212221 10539946.pdf D:JGYJGY_WEBJGY_PHPinstall_packageuploadfile2012122220121222110539946.swf"
パスは比較的深く、真ん中のスペースに 3 つのパラメータがありますが、これは機能しません

$mcd
$cmd 2 つの異なる変数名が表示されます



$ mcd

$cmd

2 つの異なる変数名が表示されます


うーん、これが私が入力したものです 申し訳ありませんが、IE で cmd コマンドをエコーし​​ました
D:JGYJGY_WEBJGY_PHPinstall_packageapppdf2swf.exe D:JGYJGY_WEBJGY_PHPinstall_packageuploadfile2012122220121222110 539946.pdf D:JGYJGY_WEB JGY_PHPinstall_packageuploadfile2012122220121222110539946.swf

それがパス

一重引用符をもう一度試してください... この問題については考えず、ただ試してください

$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php /www/upload/1.swf"
exec($cmd);
これは投稿内のコードです
​​ 情報を提供した場合、どのようにすれば実際の結果を得ることができますか?

$cmd = "c:/php/www/pdf2swf c:/php/www/upload/1.pdf c:/php/www/upload/1.swf"
exec($cmd); これは投稿内のコード
提供した情報で実際の結果を得るにはどうすればよいでしょうか?
申し訳ありませんが、プログラムでアドレスを取得したので、$cms 変数をエコーすると、このパスになります。 0539946。 pdf D: JGYJGY_WEBJGY_PHPinstall_packageuploadfile2012122220121222110539946.swf

モデレータさん、もう一度解析してもらえますか? iis の問題でしょうか?ローカルの Apache をテストしたところ、iis を確認したところ、すべてのユーザーに読み取り、書き込み、および実行の権限が与えられていました。
最初に解決すべきことは、コマンドで指示を正しく実行できるかどうかです。行またはバッチ処理の場合、問題はすべて「権限」に関するものです
もちろん、exec 関数を無効にすることはありません
私も同じ状況に遭遇しましたが、コマンドは正常に実行できましたが、戻り値はありませんでした。何が問題なのかわかりませんが、すべての権限が有効になっています

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。