プロが教える店舗&オフィスのセキュリティ対策術

下記の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");
?>

A 回答 (1件)

>※ftp_chdir($ftp, $path); の$path は、相対パスか絶対パスか、URLか



FTPサーバにURLを与えても仕方ない気がしますけど(ftp:// で記述できるURLがあるなら別ですけどね)。

RTFM.
http://www.php.net/manual/ja/function.ftp-chdir. …

カレントディレクトリに存在するサブディレクトリに移動するので「ディレクトリ名」だけです。上の階層に移動するときはftp_cdupを使いますので。

http://www.php.net/manual/ja/function.ftp-cdup.php

∴「今どの階層にいるのか」を意識していないとダメです。

>※ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)の、第二引数$remoto_file は、リモートでの
ファイル名だけでよいのか、相対パスか、絶対パスかURLか

ファイル名だけです。カレントディレクトリにアップロードされますから、あらかじめftp_chdirで移動しておくのが前提です(ここでpathが指定できるならftp_chdirは要らない)。
    • good
    • 0
この回答へのお礼

お忙しい中、どうも有難うございました。

お礼日時:2014/04/20 23:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!