0

ファイルをアップロードするフォームがあります。ファイルが到着したかどうかを確認するコードは次のとおりです。

if (is_uploaded_file($_FILES['foto'] ['tmp_name'])){
   echo "file is valid and was uploaded";
   print_r($_FILES);
 }

そしてそれは言います:

 file is valid and was uploadedArray ( [foto] => 
 Array ( [name] => Penguins.jpg     [type] => image/jpeg [tmp_name]   
 => /var/www/uploads/phpf8ECTX [error] => 0 [size] => 777835 ) ) 
 Array ( [foto] => Array ( [name] => Penguins.jpg [type] => image/jpeg [tmp_name] 
=> /var/www/uploads/phpf8ECTX [error] => 0 [size] => 777835 ) ) array(1) { 
["foto"]=> array(5) { ["name"]=> string(12) "Penguins.jpg" ["type"]=> string
(10) "image/jpeg" ["tmp_name"]=> string(26) "/var/www/uploads/phpf8ECTX" ["error"]
=> int(0) ["size"]=> int(777835) } } 

しかし、ファイルが届きませんでした。php.ini は正しく構成されており、/var/www/uploads ディレクトリにはすべてのユーザーに対して書き込み権限があります。Linux で apache2 を実行していますが、何が問題なのですか? ありがとうございました

4

2 に答える 2

3

move_uploaded_file完了したら、アップロード ディレクトリに移動する必要があります。私の理解では、ファイルを別のフォルダーに明示的に保持しないと、PHP は一時フォルダーにアップロードし、後で削除します。

if (is_uploaded_file($_FILES['foto'] ['tmp_name'])){
    if (file_exists("upload/" . $_FILES["foto"]["name"]))
    {
        //Maybe you want to issue an error message if the file already exists, like this.
        echo $_FILES["foto"]["name"] . " already exists. ";
    }
    else
    {
        move_uploaded_file($_FILES["foto"]["tmp_name"],
            "upload/" . $_FILES["foto"]["name"]);
    }
}

また、アップロード用に別の一時ディレクトリを設定することを忘れないでください。

于 2013-09-25T13:49:13.313 に答える
1

is_uploaded_file() は、参照しているファイルが実際にアップロードされたファイルなのか、/etc/passwd などのシステム ファイルなのかを確認するだけです。ここで詳細を読むことができます: http://php.net/manual/en/function.is-uploaded-file.php

filename で指定されたファイルが HTTP POST 経由でアップロードされた場合に TRUE を返します。これは、悪意のあるユーザーがスクリプトをだまして、スクリプトが動作してはならないファイル (たとえば、/etc/passwd) で動作させようとしていないことを確認するのに役立ちます。

この種のチェックは、アップロードされたファイルに対して何らかの操作を行うと、その内容がユーザーや同じシステム上の他のユーザーに公開される可能性がある場合に特に重要です。

ファイル名とプロパティを (特定の要件に基づいて) 検証した後、move_uploaded_file() を呼び出して、ファイルを一時的な場所から永続的な場所に移動する必要があります。

http://www.php.net/manual/en/function.move-uploaded-file.php

W3Schoolsの実際のアップロード スクリプトの良い例:

<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 20000)
&& 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("upload/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "upload/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
      }
    }
  }
else
  {
  echo "Invalid file";
  }
?>
于 2013-09-25T13:51:40.420 に答える