ftp_getできない?

このQ&Aのポイント
  • レンタルサーバの自前のファイルサーバからFTP接続にてファイルを取得しようとしているが、エラーとなってしまいます。
  • FTP接続はできているが、ファイルの取得に失敗(FALSE)してしまいます。
  • 知り合いのレンタルサーバを借用して全く同じプログラムを実行すると正常に一覧の取得ができました。FTP接続時・ログイン時にはエラーが発生していないのでFTPでの転送は可能だと思うのですが、全くわかりません。どなたか分かる方ご教授お願いします。
回答を見る
  • ベストアンサー

ftp_getできない?

レンタルサーバの自前のファイルサーバからFTP接続にてファイルを取得しようとしているのですが、エラーとなってしまいます。 FTP接続はできているのですが、ファイルの取得に失敗(FALSE)してしまいます。 レンタルサーバの環境は OS:Linux PHP:4.4.1 試しにftp_nlist関数にてファイル一覧を取得しようとしましたが、やはり失敗(FALSE)してしまいます。 知り合いのレンタルサーバを借用して全く同じプログラムを実行すると正常に一覧の取得ができました。 FTP接続時・ログイン時にはエラーが発生していないのでFTPでの転送は可能だと思うのですが、全くわかりません。 どなたか分かる方ご教授お願いします。 以下、スクリプトです。 if($ftp=ftp_connect($ftp_host)){  if(ftp_login($ftp,$ftp_user,$ftp_pass)){   //ファイルリスト一覧取得    $file_list=ftp_nlist($ftp,".");   var_dump($file_list);   //ファイルダウンロード    if(!(ftp_get($ftp,$local_file,$remote_file,FTP_BINARY))){     エラー処理1;    }   }   else{     エラー処理2;   } } else{  エラー処理3; }

  • S202
  • お礼率84% (142/169)
  • PHP
  • 回答数1
  • ありがとう数2

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

  • ベストアンサー
  • retr
  • ベストアンサー率75% (30/40)
回答No.1

サーバのファイヤウォールの設定によってはFTPサーバへの接続・切断はできても、一覧の取得やファイルの転送が正常に行えない場合があります。 この対処法として、FTPにはpassive modeという動作モードがあります。PHPではftp_pasvというコマンドでmodeを切り替えます。 たとえば、提示されたソースコードでは、$file_list=ftp_nlist($ftp,"."); の直前あたりに下記を追加してみてください。 ftp_pasv($ftp, true); このコマンドの詳細は下記のドキュメントをご参照ください。 http://jp2.php.net/manual/ja/function.ftp-pasv.php http://jp2.php.net/manual/ja/function.ftp-nlist.php#69140 なぜpassive modeが必要かについては、下記のURLが参考になります。 http://www.atmarkit.co.jp/fnetwork/rensai/netpro10/netpro01.html http://www.atmarkit.co.jp/fnetwork/rensai/netpro11/netpro01.html

S202
質問者

お礼

回答ありがとうございます。 ご指示どおりで上手くいきました。 助かりました。 本当にありがとうございました。

関連するQ&A

  • ftp_getでローカルにファイルが見当たらない

    下記のようなスクリプトでFTPダウンロードを試みています。 ダウンロード元はホスティング会社のサーバで、 ダウンロード先は私のWindowsPCになります。 接続から読み込みまで万事うまく行き、エラー表示もなく、 Successfully written to C:\test\backup.zip というメッセージが表示されるところまでいくのですが、 C:\test\を開けてみると肝心のファイルが見当たりません。 サーバやPCの設定等もあるかもしれませんが、 どのような原因が考えられますでしょうか? よろしくお願いいたします。 <スクリプト> $local_file = "C:\\test\\backup.zip"; $server_file = "/tmp/backup.zip"; $conn_id = ftp_connect($ftpserver); $login_result = ftp_login($conn_id, $usr, $pass); ftp_pasv($conn_id, true); if(ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)){ echo "Successfully written to {$local_file}"; } else { echo "There was a problem"; } ftp_close($conn_id);

    • ベストアンサー
    • PHP
  • phpのftp_putについて

    はじめましてphp初心者です。 以下の内容を実行した際に うまく行かず困っています。 $ftp_server="【サーバー名】"; $ftp_user_name="【アカウント名】"; $ftp_user_pass="【パスワード】"; //サーバーに接続する $conn_id = ftp_connect($ftp_server); // ユーザ名とパスワードでログインする $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // 接続できたか確認する if ((!$conn_id) || (!$login_result)) { echo "FTP接続に失敗しました。"; exit; } else { echo "FTP接続に成功しました。"; } $local_file="【ローカルのファイルパス】"; $remote_file="【FTPサーバー上のアップロードファイルパス】"; if (!ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII)) { echo "FTPアップロードに失敗しました。"; exit; } else { echo "FTPアップロードに成功しました。"; } ftp_close($conn_id); ローカル、リモート共にファイルの位置は間違っていません。 また以上のように反映させた際に返ってくる答えは 「FTP接続に成功しました。」 「FTPアップロードに成功しました。」 と出てきます。 しかし、ffftpを確認したところ サバー側に変化がありません。 手動ではffftpでアップ可能です。 ご教授お願い致します。

    • 締切済み
    • PHP
  • VBAでFTPファイル転送がうまくいかない

    利用環境  access:2003  os:xp このサイトを参考にvbaでFTPでファイル転送を実装しようとしています。 http://www.happy2-island.com/access/gogo03/capter90302.shtml 困っているのは、、エラーがでないのですが、ファイルが転送されないということです。 接続先やUserID,パスワードを間違えた場合は、ちゃんとエラーが表示されますので 接続まではできているのではないかと思いますが、最後のFTPファイル転送がうまくいきません。。 インターネットサービスのオープンとFTPサーバへの接続はうまくいっているようですが fcFTPPutFileの結果が何度やってもFALSEになります。 どのあたりを探れば問題がわかりますでしょうか? ご教示いただけますと助かります。 '■外部サーバーへファイルをアップロード Dim lngRC As Long 'インターネットサービスをオープンします lngRC = fcInternetOpen 'オープンに成功したらFTPサーバとの接続を行います If lngRC = 0 Then 'FTPサーバへ接続します lngRC = fcFTPConnect() '接続に成功したら、FTPサーバからファイルをアップロードします If lngRC = 0 Then Debug.Print Err.LastDllError '●↓この結果がFALSEになってしまい、ファイル転送ができません。。。 Call fcFTPPutFile(送り元ファイルパス&ファイル名_ , 送り先ファイルパス&ファイル名 _ , FTP_TRANSFER_TYPE_ASCII) Else MsgBox エラー内容 End If Else MsgBox エラー内容 End If ●↓この結果がFALSEになってしまい、ファイル転送ができません。。。 Public Function fcFTPPutFile(dLc As String, dRmt As String, dMd As Long) As Boolean 'dLc /ローカルファイル 'dRmt/リモートファイル 'dMd /転送モード 'FTPサーバへファイルをアップロード fcFTPPutFile = FtpPutFile(Pub_lngFtpHnd _ , dLc _ , dRmt _ , dMd _ , 0) End Function

  • FTP接続ができない

    FTP接続ができません。 接続先のサーバーは ウインドウズ2003 サーバー管理者から接続許可をいただきました。 こちらは FTPソフト(FFFTP)や ドリームウィーバーでの接続を試みていますが 「接続できません」ということになります。 ユニックス系レンタルサーバーなどは 問題なく接続できていますが、 何が問題なのかわからず、対処に困っています。 PASVモードでの接続や LISTコマンドでファイル一覧を取得 環境設定のINIファイルに保存 などを試しましたが、接続できませんでした。 ウインドウズファイヤーウォール(当方のPCはXP SP2です)や セキュリティソフトを切って接続も 試しましたが、だめでした 接続できるよい方法を ご教授いただけませんでしょうか? よろしくお願いします。

  • PHP ftp_fput()関数について

    下記のPHPスクリプトで、JPEGファイルをFTPサーバーにアップしようとしてるんですが、 サーバー側でエラーが出ます。どこが間違っているのか指摘していただけますか? ※ftp_chdir($ftp, $path); の$path は、相対パスか絶対パスか、URLか ※ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)の、第二引数$remoto_file は、リモートでの ファイル名だけでよいのか、相対パスか、絶対パスかURLか ※ちなみに、FTPサーバーへのログインはできてます。 <?php //$photo = "akashi.jpg"; $photo = $_GET['photo']; // FTPサーバーに接続 $ftp_server="users109.lolipop.jp"; $ftp = ftp_connect($ftp_server); //$res = ftp_login($ftp, "root", " "); $res = ftp_login($ftp, " ", " "); if($res==FALSE){ echo("FTPサーバーのログインに失敗しました。"); exit(1); } //$path = "/home/users/1/raindrop.jp-5247423/web/tsukushinbo/upload_photo"; // 絶対パス $path = "../tsukushinbo/upload_photo"; // 相対パス ftp_chdir($ftp, $path); // サーバー側のディレクトリを変更 /* $cur = ftp_pwd($ftp); echo($cur); exit(1); */ // ローカル側でファイルをオープン /* $dir = dirname($photo); // ファイルあるいはディレクトリへのパスを含む文字列を受け取って、 親ディレクトリのパスを返します。 //$filename = $dir."/".$photo; echo($filename); exit(1); */ $fp = fopen("$photo", 'rb') or die; //$fp = fopen("$filename", 'r') or die; // ローカルでオープンされているファイルのポインタ。 ファイルの終端まで進むと読み込みが終了する。 // FTPサーバーに画像ファイルをアップロード $remote_file = $photo; // リモート上でのファイル名指定 if(ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)){ // ローカルでオープンしている画像ファイルをバイナリモードでFTPサーバーにアップロードする echo "Successfully uploaded $file\n"; }else{ echo "There was a problem while uploading $file\n"; } fclose($fp); ftp_close($ftp); //header("Location: bbs.php"); ?>

    • ベストアンサー
    • PHP
  • Access2000でFTPの使い方について。

    Access2000のフォームから、実行のボタンをクリックするとFTPサーバに接続→ファイル取得→Accessテーブルに取込→FTPサーバのファイル削除→FTPサーバの接続切断という処理をしたいのですがどのようにしたらよいかわかりません。説明不足だとは思いますが、アドバイスを宜しくお願い致します。

  • ssh経由のftpでファイル一覧が取得できない

    sshのポート転送を利用してftpサーバにアクセスしようとしているのですが,ログインしてから,ファイル一覧を取得するときに,PASVモードで送られてくるアドレスがローカルになってしまうみたいでつながりません.おそらく,サーバの設定が悪いと思うのですが,どのようにしたらよいでしょうか? 一応,ログをのせておきます. >PASV 227 Entering Passive Mode (127,0,0,1,190,89) ダウンロードのためにホスト 127.0.0.1 (48729) に接続しています. 接続できません. ファイル一覧の取得を中止しました. ファイル一覧の取得に失敗しました. 切断しました

  • FTPで一覧リストを作成し取得(Get)したい

    VBで、FTPサーバに接続し、指定のディレクトリーからいくつかのファイルをダウンロードしています。ダウンロードするファイル数が沢山あり、出来る事なら、そのディレクトリー内のファイル名の一覧リストがほしいのです。DOSコマンドから見るときは、'ls'や'dir'は使えるのですが、一覧の作成ができません。DOSプロンプトからFTPサーバをOPENし、dir > aaa.txt と入力すると自端末のC:\document and Settings\自分のフォルダー配下に、そのaaa.txt は作られるのですが、中身が入ってきません。ファイルの一覧がほしいとき、VBではどのようにコーディングすればいいのでしょうか。教えていただければ本当に助かります。よろしくお願いいたします。

  • FTPのGetで応答がありません。

    FTPサーバはUnixでFTPクライアントはWindowsです。 単純にコマンドプロンプト画面からftpを行い、 サーバーからファイルを取得しようとしたところ、 応答がありません。 何が原因なのか皆目見当がつかない状況です。 考えられる原因を教えていただけないでしょうか?

  • FTP

    家の環境はWIN2000にTINYFTPというソフトを使ってFTPサーバを立てていますが、ユーザを作って外からFTPサーバに接続はできるのですが、中を見る事ができないようです。 sending listというメッセージが出ているのですが、なかなかファイル一覧が表示されません。 サーバ側の設定で権限全て無しで外から見れるように設定したのですが、見れないです。 誰かご存知の方教えていただけないでしょうか?

専門家に質問してみよう