2012-03-28 5 views
3

プロダクションサーバーで直面しているこの問題を手伝ってください。私はそれがまだ存在していないことを確認した後にのみ、ディレクトリに画像を保存するアプリケーションを立ち上げました。シェルコマンドを実行しているPHPが、重い使用モードでのみランダムな出力を出します。

それはすでにそれが5例で、私はそれがすべての50例から、開発およびQAではなく、実際の環境で正常に行ったことを見てかなり驚いて、次のコマンド find $filePath -name $fileInitial*

を使用存在するかどうかを確認するにはファイルが存在する場合でも空白に戻ります。

execshell_execpassthru、およびsystemでバックティックオペレータを置き換えようとしました。私もfindコマンドをlsに置き換えようとしましたが、依然として利得はありませんでした。

どうすればいいですか?

+3

glob()またはfile_exists()関数が必要な処理を行っていないため、シェルコマンドを使用していると仮定します。 – ChrisK

+0

最後に '*'が与えられていると、exec()呼び出しはシェルに 'whatever *'を検索させ、おそらくfindが実行される直前に "no match"を返します。 –

+0

@Charanjeet Kaur:質問に答えられたように見える回答を1つ選択してください。 – hakre

答えて

2

コードによっては、できるだけexec/shell_execを避けることを強く推奨します。

セキュリティを考慮してコード化されていないと、システム全体に非常に大きなセキュリティリスクが発生します。

処理しようとしている実際のコマンドに問題があるのか​​どうかはわかりませんが、手動でファイルシステムに行くのではなく、file_exists()またはglob()という関数をPHPで使用することをお勧めします。

+0

この方法をお勧めします。シェルコマンドの実行を推奨します。 file_exists()とglob()は通常、WindowsとLinuxの両方のサーバでも動作しますが、execコマンドは通常そうではありません。 – danieltalsky

0

設定しましたか:ignore_user_abort(true);set_time_limit()妥当なものはありますか? popen()も試してみてください。私はいつも正しくインターフェースするのがより簡単だと感じています。

1

ありがとうございます。あなたの提案は本当に効果的でした。 glob()でうまくいきました。

phpでシェルコマンドを実行している理由があります。結果が出るのに十分な時間を待っていない可能性があります。または、phpが実行されているCGIモードと関係があります。

あなたの考えをお伝えください。

+0

これは、ファイルシステムが実際にそれを見つけるためにアップロードされて以来更新されていないファイルシステムと何か関係があります。何らかの理由で実行が失敗する可能性があります - どちらの方法でもexec&shell_execを避けてください。一般的に使用する) - ああ、上記の答えを受け入れてください:) – ChrisK

関連する問題