2

LAMP ボックスで、PHP の exec 関数を介して SCP コピー関数をループで呼び出して、複数の画像をリモート サーバーにコピーしています。

exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true));

結果: 正常に動作しますが、PHP スクリプトが完了するまでに数秒かかります。

ただし、SCP ジョブが終了するまで PHP スクリプトを待機させたくないので、次のいずれかを試しました。

exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1 &");

結果: PHP スクリプトははるかに高速ですが、SCP は完成していません。イメージはリモート サーバーにコピーされません。

exec("nohup scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " &");

結果: 画像はコピーされますが、php スクリプトの実行時間は改善されません。呼び出しを「バックグラウンド」にしましたが、php スクリプトは SCP ルーチンが終了するのをまだ待っていると思います。

PHP スクリプトは待機しないが、SCP プロセスは終了するという実装方法はありますか?

前もって感謝します!

4

1 に答える 1

0

サーバーへの最大同時接続を超えると、問題が発生する可能性があります。したがって、同時接続を制限するか、1 つずつアップロードしてください。ブラウザが問題になる前に待機する場合は、次を php スクリプトに追加できます。

ignore_user_abort(true);
set_time_limit(0);

次のループを使用してアップロードします

exec("scp ".$this->GetUploadPath(true)." ".$currentServer->Scp.":".$this->GetServerPath($currentServer, true) . " 1>/dev/null/ 2>&1");

ブラウザから php スクリプトをトリガーした後、ブラウザを閉じることもできます。上記のコードは魔法のように機能します。

于 2013-01-15T07:41:20.743 に答える