0

PHPでファイルアップロードスクリプトを使用しています。スクリプトは小さい(2MB未満)でも正常に機能しますが、このスクリプトでアップロードする必要のある大きいファイル(約20MB)はアップロードされません。

スクリプトは以下のとおりです。その後、さらに説明があります。

<?php

if($_SERVER["REQUEST_METHOD"] == "POST")
 {
  $file = $_FILES["uploaddistance"]["name"];
  $fileTmpLoc = $_FILES["uploaddistance"]["tmp_name"];

  $pathlevel3 = 'distance/level3/';
  $pathlevel4 = 'distance/level4/';
  $pathlevel5 = 'distance/level5/';
  $pathlevel6 = 'distance/level6/';


  $level = $_POST['distancecourse'];
  $module = $_POST['distancemodule'];
  $kaboom = explode(".", $file);
   $extension = end($kaboom);

  if ($level == "level3"){
   $pathandname = $pathlevel3 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

  else if ($level == "level4"){
   $pathandname = $pathlevel4 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

   else if ($level == "level5"){
   $pathandname = $pathlevel5 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
    }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }

   else if ($level == "level6"){
   $pathandname = $pathlevel6 . $module . '.' . $extension;
   if (file_exists($pathandname)){
    unlink($pathandname);
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
   if ($moveresult == true){
   echo "Workbook uploaded";
     }
    }
   else {
    $moveresult = move_uploaded_file($fileTmpLoc, $pathandname);
    if ($moveresult == true){
     echo "Workbook uploaded";
     }
    }
   }   

   else {
    echo "Error 1";
    echo $level;
    echo $module;
    }

  }

 else {
  echo "error 2";
 }

?>

大きなファイルをアップロードすると、「エラー1」メッセージが表示され、POST値がスクリプトに渡されていないことを示しています。私が言ったように、これは小さなファイルをアップロードする場合には当てはまりません。

カスタムphp.iniファイルを作成し、最大ファイルサイズを変更してみました。次の変更を加えました。

upload_max_filesize = 64M
post_max_size = 64M
memory_limit = 96M

php.iniファイルは私のホームディレクトリ(public_html)にあります。私が理解しているように、これはディレクトリ内のすべてのスクリプトによって自動的に使用されるはずです。サイトでテストを実行するphpinfo()と、ロードされた構成ファイルはpublic_html / php.ini(詳細については、 http: //www.xenonacademy.org.uk/phptest.phpを参照)であると表示されます。これは、構成ファイルが正しいですが、何らかの理由で問題が解決しません。

また、このテストを実行するmemory_limitと、php.iniで指定した96ではなく64Mであることが示されますが、upload_max_filesizepost_max_sizeは正しいです。これらが正しく設定されている場合、なぜこれが機能しないのですか?関連するスクリプトでphp.iniを使用する必要include()がありますか、それともここでより複雑な作業が行われていますか?

誰かが私がどこで間違っているのか説明できますか?

ありがとう!

4

2 に答える 2

1

これらの値を「カスタム」php.iniで変更することはできません。これは、通常、Webサーバーによって読み取られないためです。これらのディレクティブはタイプであるためini_set、を使用しないでください。PHP_INI_PERDIR

ただし、ファイルを使用してそれらを変更し、入力.htaccessに関するドキュメントの指示に従うことができる場合があります。MAX_FILE_SIZE

MAX_FILE_SIZE隠しフィールド(バイト単位で測定)はファイル入力フィールドの前に置く必要があり、その値はPHPで受け入れられる最大ファイルサイズです。このフォーム要素は、大きなファイルが転送されるのを待って、ファイルが大きすぎて転送が失敗したことを確認する手間を省くため、常に使用する必要があります。

于 2013-02-20T18:17:12.343 に答える
-1

ファイルアップロード機能を使用する前に、php.iniファイルを上書きすることができます

 ini_set('upload_max_filesize', '10M');
 ini_set('post_max_size', '10M');
 ini_set('max_input_time', 300);
 ini_set('max_execution_time', 300);
于 2013-02-20T18:10:43.687 に答える