• ベストアンサー

バッチでFTPコマンド

バッチ処理内でFTP接続し、ファイルの上げ下げを行う処理を作成しています。 使用しているサーバーはPHPのFTP関数が使用できない環境で、 コマンド関数を利用し直接処理を書こうと思うのですが、 exec('ftp ホスト'); と記述してもユーザー名、パスワードを聞かれてしまう為正常に動作しません。 こういった場合どうしたら良いのでしょうか?? 詳しい方がおられましたらご回答頂ければと存じます。 宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • wp_
  • ベストアンサー率54% (132/242)
回答No.4

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の方のやり方のとおり外部でコマンドを定義すべきと思います。

参考URL:
http://search.net-newbie.com/php/function.proc-open.html

その他の回答 (4)

回答No.5

fopenは試してみましたか? $handle = fopen("ftp://[ユーザー名]:[パスワード]@[ホスト]/[ファイル名]", "w"); 最近はセキュリティの問題からできないことが多いですが。

参考URL:
http://jp2.php.net/manual/ja/function.fopen.php
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

PC-UNIX系であれば ncftp(ncftpget/ncftpput)などが便利ですね

  • slate
  • ベストアンサー率41% (14/34)
回答No.2

FTP バッチなどでいくつも検索出てきますよ。 Winだったら。 http://www.atmarkit.co.jp/fwin2k/win2ktips/270ftpscript/ftpscript.html

  • iyomante
  • ベストアンサー率60% (14/23)
回答No.1

スクリプト書いてもダメですか? 参考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"); のような感じで。

参考URL:
http://www.rhythm-cafe.com/shell/Sample04.aspx

関連するQ&A