- ベストアンサー
バッチでFTPコマンド
バッチ処理内でFTP接続し、ファイルの上げ下げを行う処理を作成しています。 使用しているサーバーはPHPのFTP関数が使用できない環境で、 コマンド関数を利用し直接処理を書こうと思うのですが、 exec('ftp ホスト'); と記述してもユーザー名、パスワードを聞かれてしまう為正常に動作しません。 こういった場合どうしたら良いのでしょうか?? 詳しい方がおられましたらご回答頂ければと存じます。 宜しくお願い致します。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
proc_openという双方向のパイプを使うことで実現可能です。 当方はftp環境がないので例はmysqlですが、ftpコマンドも似た感じですね。 ftp起動後にoコマンドで接続し、ユーザパスを入力していく感じです。 $descriptorspec = array( 0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("file", "/tmp/error-output.txt", "a") ); $cwd = '/tmp'; $process = proc_open('mysql -u root', $descriptorspec, $pipes, $cwd ); if (is_resource($process)) { fwrite($pipes[0], 'use データベースとか;'); fwrite($pipes[0], 'show tables;'); fclose($pipes[0]); $ret = stream_get_contents($pipes[1]); fclose($pipes[1]); $return_value = proc_close($process); } print_r($ret); しかし、運用面から見るとコマンド変更などに柔軟な対応が出来ないと思います。 そういう意味で、私はNo.1の方のやり方のとおり外部でコマンドを定義すべきと思います。
その他の回答 (4)
- saintandre
- ベストアンサー率31% (194/607)
fopenは試してみましたか? $handle = fopen("ftp://[ユーザー名]:[パスワード]@[ホスト]/[ファイル名]", "w"); 最近はセキュリティの問題からできないことが多いですが。
- yambejp
- ベストアンサー率51% (3827/7415)
PC-UNIX系であれば ncftp(ncftpget/ncftpput)などが便利ですね
- slate
- ベストアンサー率41% (14/34)
FTP バッチなどでいくつも検索出てきますよ。 Winだったら。 http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html
- iyomante
- ベストアンサー率60% (14/23)
スクリプト書いてもダメですか? 参考URLより ファイル名 : ftpCom.txt --------------------------- open www.rhythm-cafe.com user xxxx xxxx cd log binary get access.log bye --------------------------- ※一つ目のxxxx→ユーザ、二つ目のxxxx→パス exec("ftp -n < ftpCom.txt"); のような感じで。