*nix では、ftp://
ストリーム操作に費やされた時間はスクリプトの時間制限にカウントされないため、ラッパーの使用によってタイムアウトが発生することはありません。スクリプトの先頭で呼び出しset_time_limit(0);
て、スクリプトがタイムアウトしないようにしてください。
参照:
ノート:
set_time_limit()
関数と構成ディレクティブは、スクリプト自体のmax_execution_time
実行時間にのみ影響します。system()
を使用したシステム コール、ストリーム操作、データベース クエリなど、スクリプトの実行外で発生するアクティビティに費やされた時間は、スクリプトの最大実行時間を決定する際には含まれません。これは、測定時間が実数である Windows では当てはまりません。
また、転送が完了するまでブラウザを開いたままにしておく必要があるため、HTTP 経由で呼び出されたスクリプトから FTP 経由で 750MB のファイルを転送することは適切な解決策ではないことに注意してください。おそらく行うべきことは、cron ジョブを使用して転送を実行するか、HTTP 要求を使用して転送を非同期的に開始することです。
これが実行可能な解決策でない場合、このshell_exec()
アプローチで遭遇する問題は、Windows と *nix FTP プログラムの違いです。
サーバーにコマンドライン cURL バイナリがありますか? インターフェイスはプラットフォームに関係なく標準であるため、これが利用可能であれば、はるかに優れたオプションです。また、スクリプトを使用する必要はありません。コマンド ライン引数を使用してほとんどのことを実行できます。
たとえば、上記のコードは次のコマンドに要約できます。
$output = shell_exec('curl ftp://usernamex:passwordx@ftp.server.com/incoming/');
echo "<pre>$output</pre>";
これはスクリプトからのコマンドを無視しhash
ますが、ここでの目的がプログラムでディレクトリ リストを取得することである場合は、このオプションは必要ありません。
ローカル サーバーでテストするための Windows cURL バイナリは、こちらから入手できます。次のようにタグ付けされたファイルを使用することをお勧めします (ページのかなり下にあります)。
Win32 7.27.0 binary SSL SSH Dirk Paehl
cURL コマンド ライン バイナリの使用に関する完全なドキュメントは、ここにあります。