2009-05-19 7 views
0

私はプロダクションサーバ上に、とりわけFTP経由でリモートファイルのリストを取得する必要がある(FTPはリモートファイルシステムとやりとりするための唯一のオプションです)、それらを選択的にダウンロードする必要があります。PHPのネイティブFTPハンドルにアクセスできないときにPHP CLIを使用してFTPを自動化するにはどうすればよいですか?

なぜ私はこれは非常に脆い環境での運用サーバーで

PHPのネイティブFTPラッパーを使用することはできません。私はPHP CLIを使用して書いています。既存のオートメーションスクリプトのほとんどはこのように書かれています。しかし、私は非常に新しいPHP 5.1.2インストールを持っていますが、--with-ftpで再コンパイルすることはできず、そのオプションは有効になっていません。

残りのオプション

だから、私のオプションは、接続私のファイルリストを取得し、選択的もしくはshell_exec()またはFTPストリームとPHPのネイティブファイルシステム機能を使用してphp_filesystem機能を使用してダウンロードします。

残念ながら、私はいずれかの良いコード例を見つけることができません。私がFTPコマンドを使ってshell_execしようとすると、プログラムはハングします。おそらく、FTPプロンプトを開くと、制御はシェルに残ります。

$ftp_connect_command = "ftp -v -n $bl_ftp_host"; 
$ftp_login_command = "user $bl_ftp_user $bl_ftp_password"; 
$ftp_bye_command = "bye"; 

$ftp_connect_response = shell_exec("$ftp_connect_command"); 
// this never executes, because it hangs here waiting for a return to shell 
$ftp_login_response = shell_exec($ftp_login_command); 

それとも、私はこれを行うには、ストリームベースの方法は以下のようになり想像:

$ftp_path = "ftp://$bl_ftp_user:[email protected]$bl_ftp_host/"; 
$stream_options = array('ftp' => array('overwrite' => false)); 
$context = stream_context_create(); 
if ($dh = opendir($ftp_path, $context)) 
{ 
    while (filename = readdir($dh)) 
    { 
     print($filename); 
    } 
} 

しかし、私は、これは信頼性の高い方法であると考えられているかはわかりません。

ディレクトリリストを取得し、これらの方法のいずれかでファイルをダウンロードする方法を示すコードサンプルは誰でも提供できますか?

+0

5.3はまだならすされていないためどうやら、WordPressはpemftpを使用しています。最初に本番環境でこれを実行しているのはなぜですか? – troelskn

+0

私の悪い、それは5.1.2、投稿が更新されます。なぜ制限が設けられているのか?長い話だけれども。 – danieltalsky

答えて

2

純粋なPHP FTP(FTPのサポートなしでコンパイルシステム上の)

0

ネイティブのPHP FTPライブラリを見ましたか? http://us2.php.net/ftp

+0

少し質問で明確になった。この場合、PHPを再コンパイルできません。 – danieltalsky

関連する問題