0

フォームのphpファイルは次のとおりです。

<?php
$allowedExts = array("jpg", "jpeg", "gif", "png");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/png")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 60000)
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

if (file_exists("http://example.me/imgs/examples" . $_FILES["file"]["name"]))
  {
  echo $_FILES["file"]["name"] . " already exists. ";
  }
else
  {
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "http://example.me/imgs/examples" . $_FILES["file"]["name"]);
  echo "Stored in: " . "http://example.me/imgs/examples" . $_FILES["file"]["name"];
  }
  }
  }
  else
  {
  echo "Invalid file";
  }
  ?>

これは簡単ですよね?フォームの html は次のとおりです。

 <form action="img_upload.php" method="post" enctype="multipart/form-data">
 <label for="file">Filename:</label>
 <input type="file" name="file" id="file" /> 
 <input type="submit" name="submit" value="Submit"/>
 </form>

また、十分に単純です。正しい?画像を送信すると、img_upload.php ファイルにリダイレクトされ、次のテキストが表示されます。

 Upload: example.jpg
 Type: image/jpeg
 Size: 39.1943359375 Kb
 Temp file: C:\WINDOWS\Temp\php66.tmp
 Stored in: http://example.me/imgs/examplesexample.jpg

このような単純なタスクを実行しようとすると、エラーは発生しませんが、結果も得られません。私はすでにphpスクリプト内にimgs/examples/のような「/」を追加しようとしましたが、提出後の唯一の違いは次の行です。

 Stored in: http://example.me/imgs/examples/example.jpg

ここで何が欠けているかについてのアイデア。画像が使用およびアップロードされている他の多くのphpスクリプト/ mysqlテーブルがありますが、この単純なタスクには何もありません。localhostでテストするApacheサーバーでphp 5を使用しています。事前にすべての支援に感謝します。

4

4 に答える 4

3

ファイルを に移動できる可能性は低いですhttp://example.me/imgs/examples/。これは、ローカル システム上のパスではありません。

代わりに次のようなパスに移動する必要がありますC:/path/to/web/root/filename.jpg

これは、ファイルの読み取りではなくファイルの書き込みを行っているため、http プロトコルが機能する可能性がある他の場所とは異なります。

http://example.me/imgs/examples/PHP スクリプトは、ディレクトリがそれ自体と同じサーバー上にあることを実際には認識できません。そして、その URL が実際に意味していることを理解することはできませんc:/apache/htdocs/imgs/examples/。(上記のディレクトリをまったく別の場所にマップするように Apache をセットアップした場合、または実際にそのディレクトリを別の場所にリンクするようにファイル システムをセットアップした場合を想像してみてください! PHP はそれを理解できない可能性があり、複雑すぎます。)場合によっては、HTTP プロトコル URL に書き込むこともできますが、それが何を意味するのかは明確ではなく、PHP を書いた人はそれを実装していません。それが書かれている場合、ファイルをそのURLにPOSTとしてアップロードするという形をとるでしょう。これには、ファイルを受け入れるコードを記述し、それをローカルシステムのどこかに移動する必要があります...これはまさにあなたのことです..

于 2012-10-12T07:47:48.203 に答える
2

動作しないHTTP パス ( ) を使用して、アップロードしたファイルを移動しようとしていますhttp://example.me/imgs/examples

次のようにサーバーパスを指定します/imgs/examples/[正しいパスを使用してください、私は仮定しています]

move_uploaded_file($_FILES["file"]["tmp_name"],
  "/imgs/examples/" . $_FILES["file"]["name"]);

また、以下の行を HTTP パスからサーバー パスに変更する必要がある場合があります。

if (file_exists("http://example.me/imgs/examples" . $_FILES["file"]["name"]))

于 2012-10-12T07:48:19.697 に答える
1

アップロードにはディレクトリ ロケーション システムを使用する必要があります。ファーストイル; http:// を使用しないでください。セカンダリ: たとえば、いくつかのディレクトリに配置できます。uploads/ dir を .php ファイル パスにアップロードしたい

move_uploaded_file($_FILES["file"]["tmp_name"],"uploads/" . $_FILES["file"]["name"]);
move_uploaded_file($_FILES["file"]["tmp_name"],"../uploads/" . $_FILES["file"]["name"]);
于 2012-10-12T08:05:52.650 に答える