PHPでFTP関数を使用する方法とエラー対処法

このQ&Aのポイント
  • PHPでFTP関数を使用する際には、ftp_connect関数を使用してFTPサーバーに接続します。また、ftp_get関数を使用してファイルをダウンロードすることもできます。
  • ただし、FTP関数を使用する際にはいくつかのエラーが発生する可能性があります。例えば、'Fatal error: Call to a member function on a non-object'というエラーメッセージが表示されることがあります。このエラーはFTPサーバーへの接続に問題がある場合に発生することが多いです。
  • また、FTP関数を使用する際にはログのパーミッションエラーも発生することがあります。このエラーはログの保存先のパーミッションが正しく設定されていない場合に発生します。ログのパーミッションを777に設定することで解決することができます。
回答を見る
  • ベストアンサー

FTP関数について

いつも参考にさせていただいています。 PHPでFTP関数を使用したいのですが、うまくいきません。 $conn_id = ftp_connect(HOST_FTP); $upload = ftp_get($conn_id, DIR_IMAGE_TEMP . "/" . $filepath[$i],FTP_DIR . $filepath[$i],FTP_BINARY); DIR_IMAGE_TEMPは保存するパス名を表示し FTP_DIRは保存先のパス名を表示しています。 これで実行すると下記のエラーがでます。 Fatal error: Call to a member function on a non-object また、ログのパーミッションエラーがでてしまいます。 Permission denied. ログはパーミッションを777に設定しています。

  • PHP
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • randman
  • ベストアンサー率51% (17/33)
回答No.1

ftp_connect関数の後で、ftp_login関数を実行していないからかな?ftp_login関数を通していない$conn_idだから、予期しない値が入っている、とか…。であれば、パーミッションエラーもうなづけます。 エラーはどこで発生していますか?

参考URL:
http://jp2.php.net/manual/ja/function.ftp-get.php
aiurai54
質問者

お礼

すみません。単純なミスでした。親ディレクトリのパーミションの設定が悪かったみたいです・・・。 ご丁寧にありがとうございました。

関連するQ&A

  • FTP関数で・・・。

    $cd = ftp_cdup($conn_id);  if($cd == false)  $check=ftp_nlist($conn_id, FTP_DIR_IMG_TEST.$all_data['templatedir']);  if($check == false)  $mkdir=ftp_mkdir($conn_id, FTP_DIR_IMG_TEST.$all_data['templatedir']); このように親ディレクトリに移動したあとに、 フォルダを作ろうとしています。 がパーミッションエラーとなります。 Permission denied. ディレクトリを作成する場合は絶対パスですよね? 実際にコマンドでデータを見ると、 drwxr-xr-x 2 namae gn 512 11 12 18:43 img となっています。 FTPユーザーはgnで入ってますが、 この場合はgnでディレクトリを作成することができないのでしょうか?

    • ベストアンサー
    • PHP
  • ftp_getについて(バージョン4.1.2)

    上記のバージョンでftp_getをしようとすると、下記のようにワーニングがでてしまいます。 Warning: ftp_get: in また、ftp_closeも使えず、ftp_quitに変更しました。 何故このようなことがおこるのでしょうか? 書式は $cn = ftp_fget($conn_id, $fp, "./".$filepath_log[$i],FTP_BINARY);

    • ベストアンサー
    • PHP
  • FTP サーバーにある画像を表示するには

    $lines = file('ftp://USER:PASS@ftp.example.com/data.txt'); FTP サーバーのテキストファイルにアクセスするには上記のように出来ますが、 サーバーにある画像を表示することは出来るのでしょうか? ↓ こんな感じで表示出来たら便利だと思ったのですが... echo "<img src=" . file('ftp://USER:PASS@ftp.example.com/image.jpg') . " />"; とりあえず今は一度保存して表示するようにしてますが、 なにかアドバイスあれば よろしくお願いします。 $conn_id = ftp_connect($ftp_server); ftp_login($conn_id, $user, $pass); ftp_get($conn_id, $url, $url, FTP_BINARY); FTP 関数一覧 http://us2.php.net/manual/ja/book.ftp.php

    • ベストアンサー
    • PHP
  • PHPでftpを行うと速度ダウン

    PHPを使ってftp処理をしています。例えば、下記の通りのプログラムを作ったとします。 ---(※エラー処理を削除しています)--- <?php // 接続を確立する $conn_id = ftp_connect($ftp_server); // ユーザ名とパスワードでログインする $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); // ファイルをアップロードする $upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); // FTP ストリームを閉じる ftp_close($conn_id); ?> ---------------------------------- 問題なく、ftp処理はできるのですが、MS-DOSプロンプトからftpした場合やffftpなどのソフトを使ってftpした場合と比べて格段に速度が落ちます。 具体的に言えば、サーバ側・クライアント側も光回線を使っていた場合に MS-DOSプロンプト:80Mbpsくらい PHPによるftp:10Mbpsくらい の速度に落ちます。実行速度はMRTGを使ってみています。 PHPの仕様上、どうしようもないものなのでしょうか。 もしくは速度アップの関数などあるのでしょうか。 ご存知の方、ご教授ください。

    • 締切済み
    • PHP
  • 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
  • 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
  • ftpがうまく、動いていません。

    以下のようにPHP書きましたが Cドライブ直下に index.htmlができません。 エラーもでません。 何故でしょうか? 迷宮いりです。。。 ---------- $host = "ftp.dp○○○.lolipop.jp"; $user = "lolipop.jp-dp○○○"; $pass = "○○○"; $port = "21"; $timeout = "90"; // ファイルのパス $local_path = "C:\\index.html"; $remote_path = "index.html"; // HOSTに接続 $con = ftp_connect( $host, $port, $timeout ); // ログイン ftp_login( $con, $user, $pass ); ftp_pasv($con, true); // ファイルダウンロード ftp_get( $con, $local_path, $remote_path, FTP_BINARY ); ftp_close( $con );

    • 締切済み
    • PHP
  • ftpバイナリーモード転送バッチ

    zipファイルを転送するバッチを作りたいです。 ###################### 1.ftp 192.***.**.* 2.ID 3.パス 4.binary 5.put 6.bye 7.exit ###################### 上記のようにしようと思います。 条件としては *2.3のIDとパスワードは手入力 *その他は自動 そんなバッチ可能でしょうか?

  • CGI版PHPでのFTPの使用について

    現在、RedhatLinux6.2J,PostgreSQL7.1,php-4.0.4-pl1という環境でCGI版PHPを使用しています。 ftp()を使用しているのですがなかなかうまくいかず困っています。 現在下記の様なソースをPHPマニュアルからもってきて動かしています。 ==================================================================== #! /usr/local/bin/php -q <? $ftp_server = "ftpサーバーのIP"; $user = "username"; $pass = "passwd"; $conn_id = ftp_connect("$ftp_server"); $login_result = ftp_login($conn_id, $user, $pass); if ((!$conn_id) || (!$login_result)) { echo "Ftp connection has failed!"; echo "Attempted to connect to ".$ftp_server." for user ".$user; die; } else { echo "Connected to ".$ftp_server.", for user ".$user; } $local_file = "test.txt"; $remote_file = "up.txt"; $upload = ftp_put($conn_id, $remote_file, $local_file, FTP_ASCII); if (!$upload) { echo "Ftp upload has failed!"; } else { echo "Uploaded ".$local_file." to ".$ftp_server." as ".$remote_file; } ftp_quit($conn_id); ?> ==================================================================== $conn_id = ftp_connect("$ftp_server");のところで Fatal error:Call to undefined function: ftp_connect() in ./ftp_test.php on line 7 というエラーがでてしまい落ちてしまいます。 何かお分かりになる方おられましたらご教授願えますでしょうか? インストール時にしなければいけないことや php.iniファイル等で設定しなければいけない項目等ありましたらご教授お願いします。 また、passiveモードでの送受信の仕方についてもぜひご教授お願いいたします。 失礼します。

    • ベストアンサー
    • PHP

専門家に質問してみよう