ホームページ  >  記事  >  バックエンド開発  >  exec php が実行できない場合はどうすればよいですか?

exec php が実行できない場合はどうすればよいですか?

藏色散人
藏色散人オリジナル
2021-03-01 09:34:082449ブラウズ

exec php が実行できない問題の解決策: 1. yii ファイルの最初の行を変更して、php インタープリターを直接指定します; 2. exec 呼び出しメソッドを変更して、php インタープリターを直接指定します。

exec php が実行できない場合はどうすればよいですか?

#この記事の動作環境: Windows 7 システム、PHP バージョン 7.1、Dell G3 コンピューター。

php exec が実行できないのはなぜですか?

Origin

スケジュールされたタスクがあります。OSS バックグラウンド管理ページでクリックして開始したいのですが、いくつかの方法を試しましたが、システムやシステムに関係なく、うまくいきません。 exec (シェルコマンドラインで手動で実行しても問題ありません) ); 最初は、Web サーバーの nginx ユーザーの権限の問題を疑いましたが、後で環境変数が php 実行可能ファイルを見つけることができないことがわかりました (nginx ユーザーが原因で、は制限付きユーザーです);

問題箇所
exec("/home/app/example/api/app/yii demand/virtual {$id}", $output);
print_r($output);

以上 スクリプト実行後はArray()のみが出力されます当然業務コードは実行されません(ビジネスコードの1行目が出力されます);

// http://oss.example.com/index.php?r=demand/demand-ip/msg&id=1929 点击后执行
exec("/home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output);
print_r($output);

上記のスクリプトを実行するとエラーが出力されます: Array ([0] => /usr/bin/env: php : そのようなファイルまたはディレクトリはありません )

/usr/bin/env: php この文は yii ファイル #!/usr の最初の行から来ています/bin/env php、これは yii ファイルを実行する php スクリプト インタプリタの場所を示すことを目的としていますが、エラー出力は /usr/bin /env: php: No such file or directory## です。 # php が見つからないことを意味します;

[推奨学習: "

PHP ビデオ チュートリアル "]

解決策
    解決策 1 : yii ファイルの最初の行を変更して、php インタープリターを直接指定します。

  • #!/usr/bin/env php から # !/usr/local/bin/ に変更されます。 php、つまり、php インタープリターの場所を直接指定します (コードがリリースされたときに変更することもできます);
  • オプション 2: exec 呼び出しメソッドを変更し、php インタープリターを直接指定します。
exec("/usr/local/bin/php /home/app/example/api/app/yii demand/virtual {$id} 2>&1", $output);
print_r($output);
    注: 実際の実行では、exec コマンドにはまだ問題がいくつかあります。以下の「504 エラー」を参照してください。
504 エラー
    実行時間が長すぎる場合 (60 秒以上など)、ページに 504 エラー (ゲートウェイ タイムアウト) が表示されます;
  • 標準出力と標準エラーをリダイレクトする必要があります, するとバックグラウンドプロセスがコマンドを実行し、処理プロセス番号がページに出力されます;
$cmd = '/usr/local/bin/php /home/app/example/yapp/yii demand/finish 2057';
$pid_file = 'msgrepeat.pid';
$exec_cmd = sprintf("%s > /dev/null 2>&1 & echo $! > %s & cat %s", $cmd, $pid_file, $pid_file);
exec($exec_cmd);
/usr/bin/envについて(移植性が高い?)
    シバンとして「#!/path/to/NAME」ではなく「#!/usr/bin/env NAME」を使用する方が良いのはなぜですか?
  • /usr/bin/ はどのように機能しますか? env どのプログラムを使用すればよいか知っていますか?
nginx user
セキュリティ上の理由から、nginx ユーザーのシェルは通常 /sbin/nologin

関係は何ですか?スケジュールされたタスクと Web 操作の間で?
OSS バックグラウンド管理ページのスケジュールされたタスクとクリック操作の関係がうまく処理されていない;

    yii フレームワークのコンソールと Web の 2 つの処理方法;
  1. crontab のテスト容易性を向上させる方法の問題;
    crontab のユーザー エクスペリエンスを向上させる方法の問題;
    crontab タスクと API (コントローラー/アクション) コードを合理的に再利用する方法の問題;
    # #フォアグラウンドとバックエンド コントローラー/アクションを共有する方法;
  2. または、複数のプロジェクト間でコード ライブラリを便利に共有する問題;

  3. 啓発
php-fpm はexec、system、shell_exec は機能しません。CLI のみ;
  • PHP exec() はすべてのコマンドを実行しません;

以上がexec php が実行できない場合はどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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