• 締切済み

画像アップロード型掲示板でのファイル選択ダイアログ

画像アップロード型の掲示板において、ファイル選択ダイアログでファイル選択したら、 FTPサーバーにアップし、かつ、アップしたユーザー自身が、ブラウザでその画像を見れるという仕様にしたいんですが、FTPサーバー側に選択した画像ファイルが、アップされてないのです。 アップした画像をローカルのブラウザのページで見ると、x印のアイコンだけが表示されていて、中身の画像ファイルが表示されてないのです。ですが、そのx印のアイコンを右クリックすると、画像のピクセル数や、FTPサーバー先の絶対パスがちゃんと表示されてるんです。 下記のようなファイル選択ダイアログが表示されるHTMLと、そこから呼び出すPHPスクリプト において、どこか間違っているのか教えていただきたいです。よろしくお願いします。 <html> <head><title>ファイル選択ダイアログ</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <form name="form1" method="POST" enctype="multipart/form-data" action="file_upload.php"> <input type="file" name="result"> <input type="submit" name="upload" value="添付画像"> </form> </body> </html> --------------------------------------------------------------------- <?php $photo = $_POST['photo']; //////////////////////////////////// // ローカル側でファイルをオープン // //////////////////////////////////// $filename = "./files/$photo"; // $parent(親ディレクトリの直下のファイルだから、何もつけなくてよい) echo("filename=".$filename); // デバッグ用 $fp=fopen($filename, 'rb') or die; /* ファイルオープンダイアログで選択したファイルのファイル名はbbs.phpと同じディレクトリにあるfile_uproad.php から見ると、$photoにつけるパスは不要 */ /////////////////////////////////////////////////////////////////////// // FTPサーバーに接続、ログイン、サーバー側のカレントディレクトリ変更 // /////////////////////////////////////////////////////////////////////// $ftp_server="users109.lolipop.jp"; $ftp = ftp_connect($ftp_server); $res = ftp_login($ftp, "~", "~"; if($res==FALSE){ echo("FTPサーバーのログインに失敗しました。"); exit(1); } $cur = ftp_pwd($ftp); // サーバーにログイン直後のサーバー側のカレントディレクトリ echo("cur=".$cur); exit(1); ftp_chdir($ftp, $cur); // サーバー側のディレクトリを変更 ///////////////////////////////////////////// // FTPサーバーに画像ファイルをアップロード // ///////////////////////////////////////////// $remote_file = $photo; // リモート上でのファイル名指定 echo($remote_file); //if(ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)){ // ローカルでオープンしている画像ファイルをバイナリモードでFTPサーバーにアップロードする if(ftp_fput($ftp, $remote_file, $fp, FTP_BINARY)){ // リモートのカレントディレクトリにアップされる 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
  • 回答数1
  • ありがとう数0

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

formからPOSTしたデータをftpで転送したいということ? $_FILESに対する処理がないようですが?

関連するQ&A

  • 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
  • ファイル選択ダイアログで選択したファイルのパス

    下記のような2つのスクリプト間で、bbs.php側のtype=file 属性の要素で表示した ファイル選択ダイアログから選択したファイルのパス(絶対パス、相対パス)は、どこからどうやって、取得すればいいのかがわかりません。(ファイル名は取得できるのですが。) どうぞよろしくお願いします。 『bbs.php』 ※ファイルオープンダイアログの表示(POSTメソッド) ↓ <tr> <td><b>画像を添付</b></td> <td> <input type="file" name="ID_PHOTO_LOAD" tabindex="6"> </td> </tr> ※bbs.php自身に送ったPOST変数を、file_upload.phpにクエリーとして、ジャンプする ↓ $photo = $_POST['ID_PHOTO_LOAD']; // 添付画像ファイル名 if(isset($photo)) header("Location: http://5247423.raindrop.jp/tsukushinbo/bbs/file_upload.php?photo=$photo"); ------------------------------------------------------------------------------ 『file_upload.php』 <?php $photo = $_GET['photo']; //////////////////////////////////// // ローカル側でファイルをオープン // //////////////////////////////////// // ローカルのアップロード画像ファイルをリードモードでオープン(ファイルの終端まで進むと読み込みが終了する。 $parent = dirname($photo); // ファイル選択ダイアログで選択した画像ファイルが存在する親ディレクトリのパスを取得 chdir($parent); // 画像ファイルの親ディレクトリが、ローカルのカレントディレクトリになった $filename = "$photo"; // $parent(親ディレクトリの直下のファイルだから、何もつけなくてよい) $fp=fopen($filename, 'rb') or die; ←『ここでファイルオープンエラーが出ます』

    • ベストアンサー
    • PHP
  • phpでファイルをアップロードできるか?

    phpでのファイルアップロードについて質問します。 再質問となりますが、実際にコードを作成してやってみてうまくいかないので、 あらためて質問させていただきました。 eラーニング教材(htmlで作成)で、動画ファイルをストリーミングさせることになりました。 ウェブサーバ側へのアップロードする画面として、move_uploaded_file()やis_uploaded_file()メソッドをつかっていましたが、ストリーミングサーバ側としてFTP通信でポート20、21からのみのアップロードのみ許可されているとのことです。 ftp_put()メソッドを使ってアップロードさせたところうまくいきません。 **************<コード>************* $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接続に成功しました。"; } ここまででFTPの接続はできているようです。 その直後に、 $local_file="【ローカルのファイルパス】"; $remote_file="【FTPサーバー上のアップロードファイルパス】"; if (!ftp_put($conn_id, $remote_file, $local_file, FTP_BINARY)) { echo "FTPアップロードに失敗しました。"; exit; } else { echo "FTPアップロードに成功しました。"; } **************<コード>************* FTPアップロードに失敗します。 原因がわからなく、こまっています。 ポートの指定が必要なのでしょうか? おしえてください。 よろしくおねがいたします。 **************** FTP supportはenabled になっています。 phpのバージョンは4または5です。 IE7以上のブラウザ環境を想定しています。

    • ベストアンサー
    • PHP
  • 画面遷移させずに、選択画像ファイルを渡す方法

    下記のようなPHPスクリプトにおいて、ファイル選択ダイアログで選択したファイルを bbs.php で、$photo変数をGETで受け取るにはどうすればいいのでしょうか?ちなみに今のところ、受け取った $photo変数の中身はNULLです。 GET渡し以外にも方法があれば教えていただきたいです。(たとえば、$_SESSION['']変数を利用するなど) 【bbs.php】 <td><b>画像を添付</b></td> <!-- インラインフレーム --> <td><iframe src="test.html" width="460" height="40" frameborder="no" scrolling="no"> フレームを表示できないブラウザへのメッセージ </iframe> </td> ~ <?php $photo = $_GET['photo']; // 添付画像ファイル名 ?> --------------------------------------------------------------- 【test.html】 <html> <head><title>ファイルのアップロード</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> </head> <body text="white"> <table rows="1" cols="3" height="30" border="0"> <tr> <td valign="top">画像選択(10MB以下)</td> <form action="./file_upload.php" method="post" enctype="multipart/form-data" target="upload_frame"> <!-- upload_frame : ダミーフレーム --> <input type="hidden" name="max_file_size" value="10240000"> <td valign="top"><input type="file" name="sendfile" /></td> <td valign="top"><input type="submit" value="送信" /></td> </form> </tr> </table> <div id="container"></div> <iframe name="upload_frame" sytle="display:none;"></iframe> </tr> </form> </table> </body> </html> ---------------------------------------------------------- 【file_upload.php】 <?php $upload_dir = './files/'; $filename = $_FILES['sendfile']['name']; if(move_uploaded_file($_FILES['sendfile']['tmp_name'], $upload_dir.$filename)){ echo "画像".$filename."をアップロードしました。<br><br>"; // データベースの画像カラムを挿入する $con = mysql_connect("~", "~", "~"); // ローカルのMySQLデータベースサーバーに接続する mysql_select_db("~"); // データベースサーバーに存在する(myPHPAdminで作成済みの)データベースを選択する // ラストレコードの画像ファイルカラムを更新する $sql = "UPDATE bbstbl SET(photo=$_FILES['sendfile']['name']) WHERE ORDER BY sid limit 1;"; $result = mysql_query($sql, $con); $rowco = mysql_affected_rows($con); // テーブルの行数 mysql_close($con); // データベースとの接続を解除する // header("Location: bbs.php?photo=$filename"); }else{ echo "画像のアップロードに失敗しました。<br><br>"; } ?> <script type="text/javascript"><!-- var container = parent.document.getElementById('container'); image = parent.document.createElement('img'); image.src = './<?php print($filename);?>'; container.appendChild(image); //--></script> -------------------------------------------------------------

    • ベストアンサー
    • PHP
  • phpのディレクトリーorファイルのパーミッション

    お世話になります。 どうやってもうまくいかないので、質問させていただきます。 phpでログファイルを書き込むようにしたいのですが、 ファイルが作成されません。 根本的なところができていないのだと思いますが、教えてください。 やりたいことは、指定のパス(docomwnt_root配下の/logまたは include/log) にyyyymmdd.logで、テキストを書き込みたいのです。 いろいろ調べて、ディレクトリの場合は 0777、ファイルは0666にchmodすればよいとのことで 変更したのに、ファイルがないといわれてしまいます。 ソースコードは以下になります。 すみません、試行錯誤の名残とdebug行が入っています。 <?php //function logout($content){ $content="test"; error_log($content,0); //ログファイル設定 // $logpath = '/log'; // if( !is_dir($logpath) ){ // die("ディレクトリが存在しません -->". $logpath); // } //日時取得 $dateobj = new DateTime(); //アクセスタイム取得 $accessTime=$dateobj->format('Y-m-d H:i:s'); //書き込む内容 $log = $accessTime . " " . $content . "\n"; // ファイル名 $date = $dateobj->format('Ymd'); // $filename = realpath( $logpath ) . '/'.$date . '.log'; // $filename = dirname(__FILE__) . '/log/'. $date . '.log'; $filename = $date . '.log'; echo $filename; $directory_path = "./log"; if( mkdir( $directory_path, 0777) ){ echo "ok<br>"; chmod( $directory_path, 0777); } else{ echo "ng<ng>"; } if( !$fp = fopen($filename, 'ab') ){ echo "cannot open file($filename)<br>"; return -1; } if( !$fp = flock($fp, FILE_APPEND | LOCK_EX) ){ echo "cannot open file($filename)"; return -1; } if( fwrite($fp, $content) === FALSE){ echo "cannot write file($filename)<br>"; return -1; } if( !fclose($fp) ){ echo "cannot close file($filename)"; return -1; } // return 0; //} ?> この場合だと cannot open file になってしまいます。 windowsばかりやってきていたのでlinuxは、、、わかりません。 いろいろ、サンプルを試しているのですが、うまくいかなくて。。。 すみません、ご指導よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • 画像アップロードについて

    いつもお世話になっております。 画像アップロード機能を作成し、問題なくアップロードを行うことができたのですが、 ある一定サイズ(約2MB)を超えるとアップロードが行われない現象が発生しました。 アップロードした画像は既定のサイズにリサイズして保存する仕様となっているのですが アップロード自体が行われないため、困っています。 以下【該当処理抜粋】------------------------------------------------------------- // ファイル名を設定する $fname = "hoge.jpg"; // 画像の幅・高さを設定する【規定値】 $w_size = "150"; $h_size = "100"; $tmp_name = $_FILES[$fname]['tmp_name']; // 画像ファイル名 $filename = "./hoge/".$fname; if (is_uploaded_file($tmp_name)){ $type = $_FILES[$fname]['type']; if ($type == "image/jpeg" || $type == "image/pjpeg") { // 画像ファイル存在チェック if(file_exists($filename)){ // ファイルが存在する場合は削除する unlink($filename); } // 画像ファイル名でアップロードをおこなう move_uploaded_file($tmp_name, $filename); // 画像ファイルのサイズを取得する list($sw, $sh) = getimagesize($filename); $src = imagecreatefromjpeg($filename); $dst = imagecreatetruecolor($w_size, $h_size); // 画像ファイルを既定サイズにリサイズする imagecopyresized($dst, $src, 0, 0, 0, 0, $w_size, $h_size, $sw, $sh); imagejpeg($dst, $filename); echo $fname[1]."ファイルのアップロードが完了しました。<br>"; }else{ echo $fname ."ファイルの画像形式が正しくありません。<br>"; } }else{ echo $fname ."ファイルはアップロードされませんでした。<br>"; } ---------------------------------------------------------------------------------------------------- 現象について調べたところ、PHPにはアップロードサイズが設定されている(デフォルト2MB)ため サイズの大きいファイルはアップロードできないようです。 サーバーはロリポップでレンタルしているためphp.iniの設定を変更ができません。 画像自体を事前にリサイズしてアップロードを行えば問題ないのですが、 今後、一般の方にも公開を予定してまして、リサイズ方法が分からない人(そのようなソフトがない人)にも 操作できるようにデジカメで撮った写真をそのままアップロードできる形式にしたいと考えています。 何かいい方法があればご教授願います。 【環境】 PG:php4.3.11 WEB:Apache

    • 締切済み
    • PHP
  • PHPでアップロードしたファイルが開けない

    CSVファイルにDBのデータが入っていて、 これを、phpのフォームでアップロードしてinsertまたはupdateしたいと思っています。 で、以下のようにやったのですが、 ###################################################### update.txtをアップロードしました。 <hr> files/update.txtファイルを開けませんでした ###################################################### と表示されています。 ソースはこんなかんじです。 (タブを全角空白4文字に置換してます) <?php //<fileをおきやすいいちにもってく> if (is_uploaded_file($_FILES["upfile"]["tmp_name"])) {     if (move_uploaded_file($_FILES["upfile"]["tmp_name"], "files/" . $_FILES["upfile"]["name"])) {         chmod("files/" . $_FILES["upfile"]["name"], 0644);         echo $_FILES["upfile"]["name"] . "をアップロードしました。";         } else {         echo "ファイルをアップロードできません。";         }    } else {     echo "ファイルが選択されていません。"; } //</fileをおきやすいいちにもってく> ?> <hr /> <?php //<fileひらく> $filename ="files/" . $_FILES["upfile"]["name"]; $fp = fopen($filename,'r'); print $filename ; if(is_resource($fp)){     die("ファイルを開けませんでした"); } flock($fp,LOCK_SH); //</fileひらく> //<1行ずつアップデート> while(!feof($fp)){ 以下無謀・・・ なお、ディレクトリはこんなかんじです。 #################################################### [root@★ files]# pwd /var/www/admin_html/files [root@★ files]# ls -al /var/www/admin_html/ total 24 drwxr-xr-x 3 mygwdisk mygwdisk 4096 Aug 12 08:25 . drwxrwxr-x 11 root root 4096 Aug 12 05:11 .. -rw-r--r-- 1 root root 51 Aug 12 05:28 .htdigest -rw-r--r-- 1 mygwdisk mygwdisk 2991 Aug 12 09:04 bc-refresh.php drwxrwxrwx 2 mygwdisk mygwdisk 4096 Aug 12 09:10 files -rw-r--r-- 1 mygwdisk mygwdisk 1511 Aug 12 07:44 index.php [root@★ files]# ls -al /var/www/admin_html/files total 12 drwxrwxrwx 2 mygwdisk mygwdisk 4096 Aug 12 09:10 . drwxr-xr-x 3 mygwdisk mygwdisk 4096 Aug 12 08:25 .. -rw-r--r-- 1 apache apache 1657 Aug 12 09:10 update.txt [root@★ files]# "########################################################## どなたかお助けいただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • PHP
  • ファイルアップロードのダイアログボックスで拡張子を固定するには

    PHP4で画像ファイルをアップロードするスクリプトを組んでいたのですが、<input type="file">のボタンをクリックしたときに表示されるダイアログボックスにおいて、拡張子を決めておいて画像ファイルのみを選択するようにはできないんでしたっけ?? 現在は、「すべてのファイル(*.*)」がデフォルトで、 画像(*.gif;*.jpg;*.jpeg;*.png) HTML (*.htm;*.html) が選択できるようになっています。 これを、 画像(*.gif;*.jpg;*.jpeg;*.png) だけ表示させたいと考えています。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • 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
  • phpでのファイルアップロード

    ファイルのアップロードについてご質問があります。 宜しくお願いします。 基礎phpという本でファイルをアップロードするサンプルがあり、このスクリプトでアップロードされたファイルを格納する『upload』というディレクトリをサーバに作成し、スクリプトを実行して、実際にファイルがアップロードできているかffftpにて『upload』ディレクトリの中を見てみると、なにも表示されませんでした。しかしブラウザから http://myドメイン/upload/ファイル名 にアクセスすると表示されます。 ですのでアップロードはできているがファイルが見えないという状態になっております。また『upload』ディレクトリの削除などもできなくなってしまいます。 サーバの設定が関係しているのかとも思ったのですが、サーバの設定を変更することはできないので、プログラムがわで何とかできないでしょうか? 大変申し訳ありませんが宜しくお願いいたします。 以下がそのコードです。 【up.html】 <html> <head><title>File Uploader</title></head> <body> <form method="post" enctype="multipart/form-data" action="up.php"> <input type="file" name="upfile"> <input type="submit" value="upload"> </form> </body> </html> 【up.php】 <html> <head><title>File Uploader</title></head> <body> <p> file uploader </p> <?php $updir = "./upload/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $updir.$filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); }else { print("<b>" . $filename . "</b> uploaded!"); } ?> </body> </html>

    • ベストアンサー
    • PHP

専門家に質問してみよう