ファイルアップロードのエラーに関して

このQ&Aのポイント
  • ファイルアップロードに関する問題が発生しました
  • ローカルでのテスト環境で、突然エラー表示が出るようになりました
  • スクリプトのおかしい点などを含め、アドバイスをお願いします
回答を見る
  • ベストアンサー

ファイルアップロードのエラーに関して

こんばんは。お世話になっております。 これまで、以下のようなスクリプト(一部ですが)にて、ファイルのアップロードを行っておりますが、ローカルでのテスト環境で、突然エラー表示が出るようになってしまいました。(phpバージョン 5.2.2) $folder = $_SESSION['id']; function deleteDir($rootPath){ if(is_dir($rootPath)){ if($strDir = opendir($rootPath)){ while($strFile = readdir($strDir)){ if($strFile != '.' && $strFile != '..'){ unlink($rootPath.'/'.$strFile); } } closedir($strDir); rmdir($rootPath);//ここで「rmdir(/home/public_html/html/member_picture/4/) [function.rmdir]: Permission denied in 」というエラー } } } deleteDir("/home/public_html/html/member_picture/$folder/"); mkdir ("/home/public_html/html/member_picture/$folder/",0707);//ここで、「mkdir() [function.mkdir]: File exists in 」というエラー これまで何ら問題なく作動していただけに、突然のエラー表示に(スキル不足故に)成す術もなく、スプリプトのおかしな点などを含め、アドバイスなど頂戴出来ればと投函しました。 お忙しい中恐縮ですが、宜しくお願い申し上げます。 ※提示したスクリプトが不適切(提示不足)なものであったらお許し下さい。

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

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

  • ベストアンサー
  • galluda
  • ベストアンサー率35% (440/1242)
回答No.1

がると申します。 ざくっと拝見したかぎりですと…おそらく ・どこかのタイミングで$rootPath(/home/public_html/html/member_picture/4/)が不当に作られてしまった ・なので、rmdirしようとしても「Permission denied in : 削除しようとしてるみたいだけど、権限(Permission)がない(denied)から削除できないよ」って言っている ・さらに、mkdirで指定している「/home/public_html/html/member_picture/$folder/」のディレクトリはすでに存在していると思われる ・そのために「File exists in : ファイル(ディレクトリ)はすでに存在してるよん」というエラーが出てきている という状況がかいま見えます。 とりあえず…場当たり的には「FTPでひっかかってるディレクトリを削除する」のが手っ取り早いのではないかと思うのですがどうでしょうか? 以上ざくざくっとですが。

sadacha
質問者

お礼

galluda様 こんばんは。お世話になっております。早速のご回答を有難う御座います。 本日になって、不思議とエラー分は表示されなくなり、質問文中の「member_picture」フォルダ内に同名のフォルダ(1と、1(2)と出来ていた)があることに気付き、削除しようにも削除できず、再起動を繰り返しているうちに、ようやく削除出来た・・という状況でした。 PCの調子が悪いのでしょうか・・・。 今現在はエラー文の表示も無く、正常に動いているようなので、もう暫く様子を見てみようかと思います。 いずれにせよ、galludaさんのフローには感謝しています。有難う御座いました。

関連するQ&A

  • ディレクトリ削除

    お世話になっております。 画像をアップロード(ディレクトリ生成&そのディレクトリ内に保存)した後、安易な考えか、アップロードし直すという流れのとき、一旦生成したディレクトリを削除し、新たにディレクトリを生成、そしてその中に保存したいと考えておりますが、rmdir関数ではファイルが存在した場合、削除が出来ないと思いますが、ファイルが存在しても全て削除できるようにするには どのようにすれば良いのでしょうか? 一旦ファイルを削除して・・とも考えたのですが、そのような場合、やはりセッションを用いてファイル名を引き渡す?という流れになるのでしょうか? /* ディレクトリ削除メソッド */ function deleteDir($rootPath){ $strDir = opendir($rootPath); while($strFile = readdir($strDir)){ if($strFile != '.' && $strFile != '..'){ //ディレクトリでない場合のみ unlink($rootPath.'/'.$strFile); } } rmdir($rootPath); } deleteDir('/home/httpd/vhosts/test.aaa.com/test/'); このようなコードがとあるサイトで紹介されておりましたが、やはりこれもセッションが必要なのかな?などと・・・お恥ずかしい質問ばかりで恐縮ですが、ご教授頂ければ幸いです。宜しくお願い致します。

    • ベストアンサー
    • PHP
  • phpでディレクトリが作れません

    php初心者です レンタルサーバで php.iniはいじれない環境です、 ディレクトリを作ろうとすると Warning: mkdir(testdir) [function.mkdir]: File exists in /home/xxxx/public/www/php/mkdir.php on line 14 とエラーが出ます <? $chk = mkdir("mydir"); $chkr = mkdir("mydir_r", 0777); // 読み込みのみを許可 if ($chk) { echo "mydir を作成しました。 <br>\n"; } if ($chkr) { echo "mydir_r を作成しました。<br>\n"; } ?> 間違ってますでしょうか ご指導願いたいです

    • 締切済み
    • PHP
  • PHP 画像のアップロードについて(move_uploaded_file)

    PHP初心者です。画像のアップロード機能を作成中です。 $path="/home/○○○/public_html/admin/w/p/5.jpg" move_uploaded_file($_FILES[MAINPHOTO]['tmp_name'], $path) で画像をアップしようとしたところ、次のエラーが出ます。 Warning: move_uploaded_file(/home/○○○/public_html/admin/w/p/5.jpg) [function.move-uploaded-file]: failed to open stream: Permission denied in /home/○○○/public_html/admin/aaa.php on line 125 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phptC2x2A' to '/home/○○○/public_html/admin/w/p/5.jpg' in /home/○○○/public_html/admin/aaa.php on line 125 ローカルのadmin以下にw/pフォルダはきちんとあります。そこに5.jpgは存在してません。またアップする画像は別名です。 phpは4.2を使用しています。 サーバーはレンタルのkagoya.netを使用しています。 分かりやすい説明よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHPエラーコードについて

    このようなエラーの場合どうすればいいのでしょうか?どなたか宜しくお願いいたします。 Warning: main(pager/pager.php) [function.main]: failed to open stream: No such file or directory in /home/○○○○/public_html/server/app/○○○○/○○○○.php on line 10 Fatal error: main() [function.require]: Failed opening required 'pager/pager.php' (include_path='../../pear:../../smarty:.:/usr/local/lib/php') in /home/○○○○/public_html/server/app/○○○○/○○○○.php on line 10

    • 締切済み
    • PHP
  • PHPファイルのシンボリックリンクの実行で Internal Server Error

    プログラムファイルが以下にあるとします。 /home/pgroot/public_html/test.php 内容は、 <?php print "ok"; ?> という最小限のスクリプトです。 これに、以下のようにシンボリックリンクを張ります。 /home/myhome/public_html/test.php (---->/home/pgroot/public_html/test.php) リンクの方をWEBからアクセスすると、Internal Server Error になります。本物の方をWEBからアクセスすると、正常に動作します。 Internal Server Error の時の Apache のエラーログには以下の記述があります。 [error] Premature end of script headers: /home/myhome/public_html/test.php 他のサーバーでは普通に動くのですが、なぜこのサーバーでは動かないのかという鯨飲を知りたいのですが、どなたかアドバイスいただけませんか? よろしくお願いします。

  • PHP エラー

    PHP勉強中の初心者です。会員登録画面を作り動作確認しているのですが ログインするときに下記のエラーが出ます。 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 15 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_real_escape_string() [function.mysql-real-escape-string]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 16 Warning: mysql_query() [function.mysql-query]: Access denied for user 'nakahiro7'@'localhost' (using password: NO) in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Warning: mysql_query() [function.mysql-query]: A link to the server could not be established in /home/nakahiro7/nakahiro7.webcrow.jp/public_html/public_html/login.php on line 18 Access denied for user 'nakahiro7'@'localhost' (using password: NO) login.phpのソースは下記です <?php require('dbconnect.php'); session_start(); if ($_COOKIE['email'] != ''){ $_POST['email'] = $_COOKIE['email']; $_POST['password'] = $_COOKIE['password']; $_POST['save'] = 'on'; } if(!empty($_POST)) //ログインの処理 if ($_POST['email'] != '' && $_POST['password'] != ''){ $sql = sprintf('SELECT * FROM member WHERE email="%s" AND password="&s"', mysql_real_escape_string($_POST['email']), mysql_real_escape_string(sha1($_POST ['password']))); $record = mysql_query($sql) or die(mysql_error()); if ($table = mysql_fetch_assoc($record)) { //ログイン成功 $_SESSION['id'] = $table['id']; $_SESSION['time'] = time(); //ログイン情報を記録する if ($_POST['save'] == 'on') { setcookie('email',$_POST['email'],time()+60*60*24*14); setcookie('password',$_POST['password'], time()+60*60*24*14); } header('Location: index.php'); exit();}else{ $error['login'] = 'failed'; }}else{ $error['login'] = 'blank'; } ?> <div id="lead"> <p>アドレスとパスワードを入力しログインしてください</p> <p>メンバーズ登録がまだの方はこちら</p> <p>&raquo;<a href="join/">メンバーズ登録をする</a></p> </div> <form action="" method="post"> <d1> <dt>アドレス</dt> <dd> <input type="text" name="email" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['email']); ?>" /> <?php if($error['login'] == 'blank'): ?> <p class="error">*アドレスとパスワードを記入ください</p> <?php endif; ?> <?php if ($eoor['login'] == 'failed'): ?> <p class="error">*ログインに失敗しました。正しく入力してください。</p> <?php endif; ?> </dd> <dt>pasword</dt> <dd> <input type="password" name="password" size="35" maxlength="255" value="<?php echo htmlspecialchars($_POST['password']); ?>" /> </dd> <dt></dt> <dd><input id="save" type="checkbox" name="save" value="on"> <label for="save">次回から自動的にログイン</label> </dd> </d1> <div> <input type="submit" value="Log in"/></div> </form> ググりまくりましたが解決できませんでした。 エラーの解決方法 その他ご指摘ありましたらお願いいたします。

    • ベストアンサー
    • PHP
  • 画像のアップロード

    はじめまして。本を参考にphp4.3.11&MYSQLによる画像のアップロードについて勉強中の初心者です。 開発はレンタルサーバーで行っています。 画像のアップロードに関して下記プログラムを設定しているのですが、 エラーが表示されて画像のアップロードができません。 ■設定したitem2.php 内のソースです。 require( '../config.php' ); // 写真アップロード $path_parts = pathinfo( $_FILES['userfile']['name'] ); $uploadfile = $item_image_dir . $item_id . '.' . strtolower( $path_parts['extension'] ); if ( move_uploaded_file( $_FILES['userfile']['tmp_name'], $uploadfile ) ) { chmod( $uploadfile, 0777 ); $sql = "update item set image_url ='" . $item_image_url . $item_id . '.' . strtolower( $path_parts['extension'] ) . "' where item_id = '$item_id'"; $result = mysql_query( $sql ); } ■外部参照している../config.php 内の記述です。 $item_image_dir = '/var/www/****/htdocs/image/item/'; $item_image_url = '/image/item/'; ▼エラー内容です。 Warning: move_uploaded_file(home/****/public_html/image/item/0.gif) [function.move-uploaded-file]: failed to open stream: No such file or directory in /home/****/public_html/admin/item2.php on line 68 Warning: move_uploaded_file() [function.move-uploaded-file]: Unable to move '/tmp/phpov0Fqr' to 'home/****/public_html/image/item/0.gif' in /home/****/public_html/admin/item2.php on line 68 image/itemのパラメータは777に設定しております。 どなたか原因お分かりになられる方がいらっしゃったらどうかお教え ください。ご不明な点などございましたら是非ご指摘ください。 どうぞよろしくお願いいたします。

    • ベストアンサー
    • PHP
  • ファイルロックについて

    以下のようなプログラムを作り実験しているのですが、よくわからない事態になっています。 まず、ブラウザを2つ用意して、一方のブラウザで実行した後、すぐに2つめのブラウザで実行します。 mkdirの場合、$which=1として、2つ目を実行すると、busyとでます。これは1つ目がロックしているからということは分かります。 しかし、symlinkの場合、2つ目でもbusyという文字はでず、何事もなかったように両方ともOKと表示されます。これは本当にロックできているのでしょうか。また、この場合、lock.cgiが生成されません。 また、サーバーによってはmkdirで試行すると、まだロックしていないにもかかわらず、busyとでるのもあります。これは、mkdir方式が対応していないと考えればよいのでしょうか。 ------------------------ #! /usr/local/bin/perl $lockfile = "./lock.cgi"; $which = 1; filelock(); sleep 10; fileunlock(); error("OK"); sub error{ print <<END; Content-type: text/html <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML><HEAD> </head> <body> $_[0] </body></html> END exit; } sub filelock { if (-e $lockfile) { # 3分以上古いロックは削除する ($mtime) = (stat($lockfile))[9]; if ($mtime < time - 60) { fileunlock(); } } local($retry) = 2; if($which){ #mkdir関数式ロック while (!mkdir($lockfile, 0755)) { if (--$retry <= 0) { &error("busy"); } sleep(1); } }else{ # symlink関数式ロック if ($lockkey == 1) { while (!symlink(".", $lockfile)) { if (--$retry <= 0) { &error("busy"); } sleep(1); } } } } sub fileunlock { if($which){rmdir($lockfile);}else{unlink($lockfile); } }

  • PHPスクリプトでエンコードエラー

    (http://c-php.mine.nu/)で配布されている「貼り付けアンケート」を設置したところ、以下のようなエラーが出ました。 Warning: mb_convert_encoding(): Illegal character encoding specified in /home/toraya-c/public_html/harituke/harituke.php on line 94 Warning: mb_convert_encoding(): Illegal character encoding specified in /home/toraya-c/public_html/harituke/harituke.php on line 95 Warning: mb_convert_encoding(): Illegal character encoding specified in /home/toraya-c/public_html/harituke/harituke.php on line 96 Fatal error: Call to undefined function: mb_check_encoding() in /home/toraya-c/public_html/harituke/harituke.php on line 140 エンコードがうまくいってないようなのですが。。 指定の行数の記述は以下です。 $title = mb_convert_encoding($title,'EUC-JP',$en); $body = mb_convert_encoding($body,'EUC-JP',$en); $quest = mb_convert_encoding($quest,'EUC-JP',$en); if(!mb_check_encoding($body,'EUC-JP') || mb_check_encoding($body,'ASCII')){ 配布されているものを特に変えず(設定部分以外)、そのままupしたつもりですが、エラーの原因がわかりません。 当方、php初心者なので的外れな質問でしたら申し訳ございませんが、よろしくお願いします。

    • ベストアンサー
    • PHP
  • HPビルダー8:転送エラーが発生します

    作成したHPを転送しようとすると次のようなエラーメッセージが出ます。 「転送先サーバーの/public_html/My Picture/フォルダへ移動できませんでした。 転送先フォルダの指定が正しくない可能性があります。」 どう操作すれば正常化するでしょうか。

専門家に質問してみよう