2

PHPでビデオアップロードのデモを試みていますが、エラーが発生しています

Notice: Undefined index: file in C:\wamp\www\upp\upload_file.php 行 3 コール スタック

ファイルは次のとおりです。

abcd.html

<html>
<body>

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

</body>
</html>

upload_file.php

<?php
$allowedExts = array("wmv","avi","mpeg","mpg");
$extension = end(explode(".", $_FILES["file"]["name"]));
if ((($_FILES["file"]["type"] == "video/avi")|| ($_FILES["file"]["type"] == "video/mpeg")
|| ($_FILES["file"]["type"] == "video/wmv")
|| ($_FILES["file"]["type"] == "video/mpg"))
&& ($_FILES["file"]["size"] < 200000)
&& 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";
  }
?>

enter code here

画像のアップロードを試みたときは機能しましたが、ビデオのアップロードのためにphpコードでファイルタイプを変更したため、上記のエラーが発生しました

4

2 に答える 2

3

$_FILE に「未定義のインデックス」が表示された場合、可能性の高い順に、PHP、Apache、またはセキュリティ ツール (例: suhosin、apparmor) がアップロードをブロックしています。後者の 2 つは、コードを Linux 実稼働サーバーに配置するとすぐに主に適用されるため、最初の 2 つに焦点を当てます。

同じディレクトリにファイルを作成し、次のコードを入れます。

<?php phpinfo();

次に、次の設定を探します。

upload_max_filesize
post_max_size

それらがビデオよりも小さい場合は、最初の設定を変更する必要があります。

Windows 検索で wamp ディレクトリで php.ini を見つけ、行を次のように変更します。

upload_max_filesize = 100M
post_max_size = 100M

次に、Apache を停止してから開始し、値が増加したかどうか phpinfo を確認します。もしそうなら、あなたのアップロードはうまくいくはずです。

値が変更されてもアップロードが機能しない場合は、httpd.conf を検索して LimitRequestBody の値を見つけ、それを増やして Apache を再起動します。

于 2013-03-22T09:24:11.053 に答える
1

あなたが受け取っているエラーは、フォームが送信されていなくてもphpコードが実行されているためです。したがって、ファイルをアップロードしていないため、開始時に配列は作成されません。実際、それはエラーではなく警告です

フォームが送信されたかどうかを確認します.. isset($_POST['submit']) を使用して

次に、コードを最適化することをお勧めします..ファイルタイプをチェックする場合、拡張子をチェックする必要はありません..

コードを少し変更しました..試してみてください

                   <?php
            $is_form_submitted =  (isset($_POST['submit']))?true:false;

        if($is_form_submitted)
        {

            $allowedTypes   = array("video/wmv","video/avi","video/mpeg","video/mpg",'video/mp4');
            $is_valid_type  = (in_array($_FILES['file']['type'], $allowedTypes))?true:false;
           if ( $is_valid_type&& ($_FILES["file"]["size"] < 2000000))
          {
            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";
         }

        }
                ?>

提案

アップロードの前に、次の php_ini 設定を確認してください

file_uploads
upload_max_filesize
max_input_time
memory_limit
max_execution_time
post_max_size

参照 : http://www.radinks.com/upload/config.php

于 2013-03-22T09:26:33.140 に答える