[ズバリなご回答、1名様に100pt進呈いたします!]

PHPの質問です。フォームからイメージファイルをアップロードしようとしました。保存先ディレクトリーを相対パスから絶対パスに書き換えたところ、ファイルがアップロードされず、保存されません。なぜなのでしょうか?

ご存じの方がいましたら、すみませんがご教授ください!
よろしくお願いします。

コード↓
http://www.paper-knife.net/prototype/datasorce.html

回答の条件
  • URL必須
  • 1人3回まで
  • 登録:
  • 終了:2007/04/10 00:48:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:Kumappus No.1

回答回数3784ベストアンサー獲得回数185

ポイント50pt

http://php.plus-server.net/ref.filesystem.html

open()の指定先にURLを使う場合はphp.iniの中で

allow_url_fopen = On

が指定されていないといけませんがそうなっていますか?

動いていた"./file/"の方はファイルシステム上の相対パスとも解釈されるので上記オプションがOffでも動きますから。

id:paper-knife

ご回答ありがとうございます。サーバーのセキュリティー上、設定はONは非推奨のため、OFFのままだそうです。

2007/04/10 00:10:05
id:studioes No.2

回答回数523ベストアンサー獲得回数61

ポイント100pt

$save_dir = "http://www.paper-knife.net/diary/file/";

 これでは、ディレクトリではなくURLです。

 ディレクトリとは、そのサーバ上(www.paper-knife.net)上の場所ですので、

/usr/hoge/public_html/diary/file/ 等のようなものです。

 URLの/diary/file/等もWebサーバが公開するためにマッピングしているものですので、実際のサーバ上のディレクトリはサーバの設定次第になります。

 使用しているサーバの管理者に問い合わせるなどして、自分の公開されているホームディレクトリを確認してください。

http://q.hatena.ne.jp

id:paper-knife

ご回答ありがとうございました。

2007/04/10 00:47:57
  • id:paper-knife
    「$save_dir = ./file/」にしますと保存もアップロードも可能です。ですが後にこのデータベースのテーブルをXMLに書き出した時に、変数d_imageは「./file/〜.jpg」と書き出されてしまって、次にこのXMLを読むFLASHに支障が出てきてしまいます。どうすればXMLに書き出す時のみに、「http://www.paper-knife.net/diary/file/〜.jpg」となるように書き出せるのでしょうか?ご教授ください!よろしくお願いします。

    http://www.paper-knife.net/prototype/datasorce.html
  • id:studioes
    DBに入れる$d_imageをURL形式にしたいのであればこんな感じで。
    $d_image = substr($d_image,1); //先頭の1文字(.)を削除
    $d_image = 'http://www.paper-knife.net/diary'.$d_image; //http~を前に付け足す。

    SQL文を組み立てる前に置いてください。
    ↓この手前です。
    if (!empty($d_title) and !empty($d_mes)) {
    $sql = "INSERT INTO uploaddata(d_title, d_image, d_mes, d_date) ";
    $sql .= "VALUES(";
    $sql .= "'" . $d_title . "',";
    $sql .= "'" . $d_image . "',";
    $sql .= "'" . $d_mes . "',";
    $sql .= "'" . date("Y/m/d H:i:s") . "'";
    $sql .= ")";
  • id:paper-knife
    回答ありがとうございます!
    アップロード、保存、XMLの書き込みの問題は解決されました。
    ですが、フォームが設置されている管理画面のhtmlテーブルには画像が出力されません。画像への絶対パスを呼び出しているのになぜなのでしょうか?


    // データを取り出す
    $sql = "SELECT * FROM uploaddata ORDER BY id DESC";
    $res = mysql_query($sql, $conn) or die("データ抽出エラー");
    mysql_query("SET NAMES utf-8");

    // 取り出したデータを表示する
    echo "<table border=\"1\">";
    while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
    echo "<form method=\"POST\" action=\"".$_SERVER["PHP_SELF"]."\">";
    echo "<tr>";
    echo "<td><input type=\"submit\" value=\"削除\" name=\"sub1\"></td>";
    echo "<input type=\"hidden\" value=\"".$row["id"]."\" name=\"id\">";
    echo "<td>".$row["id"]."</td>";
    echo "<td>" . date("Y/m/d", strtotime($row["d_date"])) . "</td>";
    echo "<td>".$row["d_title"]."</td>";
    echo "<td><img src=\"".$row["d_image"]."\"></td>";
    echo "<td>".$row["d_mes"]. "</td>";
    echo "</form>";
    }
    echo "</table>";

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません