2017-03-27 77 views
0

所以我做了一個PHP文件上傳文件。這是代碼。PHP - 無法上傳文件,甚至超過1MB,編輯後php.ini

HTML:

<html> 
<head></head> 
<body> 

<form method="post" action="" enctype="multipart/form-data"> 
    Upload File: 
    <input type="file" name="upload" /><br> 
    <input type="submit" name="submit" value="Submit"/> 
</form> 
</body> 
</html> 

PHP:

<?php 
include("config.php"); 
if(isset($_POST['submit']) ) 
{ 
if ($_FILES['upload']['size'] != 0){ 
$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filedata= $con->real_escape_string(file_get_contents($_FILES['upload']['tmp_name'])); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 
$query = "INSERT INTO contracts(`filename`,`filedata`, `filetype`,`filesize`) VALUES ('$filename','$filedata','$filetype','$filesize')" ; 
if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} 
else 
{ 
echo "Error:<br>" . $con->error; 
} 
} else { 
$filename = $con->real_escape_string($_FILES['upload']['name']); 
$filetype = $con->real_escape_string($_FILES['upload']['type']); 
$filesize = intval($_FILES['upload']['size']); 
$query = "INSERT INTO contracts(`filename`, `filetype`,`filesize`) VALUES ('$filename','$filetype','$filesize')" ; 

if ($con->query($query) == TRUE) { 
echo "<br><br> New record created successfully"; 
} else { 
echo "Error:<br>" . $con->error; 
} 
} 
$con->close(); 
} 
?> 

但它顯示了這樣的警告。

Warning: mysqli::query(): MySQL server has gone away in C:\xampp\htdocs\contractdb\filetest.php on line 29 

Warning: mysqli::query(): Error reading result set's header in C:\xampp\htdocs\contractdb\filetest.php on line 29 
Error: 
MySQL server has gone away 

儘管我修改了php.ini文件並重新啓動了apache。這是我在php.ini文件中編輯的內容。我只編輯了這三件事。

memory_limit = 32M 
upload_max_filesize = 24M 
post_max_size = 32M 

我嘗試上傳1MB以上的文件,但它仍然不起作用。我想上傳大文件。我做錯了什麼來獲得警告信息?

+0

已重新啓動PHP服務器? –

+0

你是說重啓apache?因爲我已經做了很多次了。 –

+0

如果您嘗試phpinfo(),您會看到什麼? 把這一行放在一個文件中,並嘗試瀏覽它..它會告訴你,如果你所做的更改已被應用。 <?php phpinfo(); ?> – user2399432

回答

0

確保你還在你的MySQL設置中設置了max_allowed_pa​​cket_size(在這裏閱讀更多信息:How to change max_allowed_packet size)並檢查你是否沒有阻止文件上傳超過1MB的.htaccess文件,這可能看起來像這樣:

php_value upload_max_filesize 1M 

你總是可以做一個ini_get檢查,如果新的php.ini的設置實際上已經成功地設置:http://php.net/manual/en/function.ini-get.php

echo(ini_get('upload_max_filesize')); 
0
<?php 
    if($_FILES["photo"]["error"] > 0){ 
     echo "Error: " . $_FILES["photo"]["error"] . "<br>"; 
    } else{ 
     echo "File Name: " . $_FILES["photo"]["name"] . "<br>"; 
     echo "File Type: " . $_FILES["photo"]["type"] . "<br>"; 
     echo "File Size: " . ($_FILES["photo"]["size"]/1024) . " KB<br>"; 
     echo "Stored in: " . $_FILES["photo"]["tmp_name"]; 
    } 
    ?> 

<?php 
if(isset($_FILES["photo"]["error"])){ 
    if($_FILES["photo"]["error"] > 0){ 
     echo "Error: " . $_FILES["photo"]["error"] . "<br>"; 
    } else{ 
     $allowed = array("jpg" => "image/jpg", "jpeg" => "image/jpeg", "gif" => "image/gif", "png" => "image/png"); 
     $filename = $_FILES["photo"]["name"]; 
     $filetype = $_FILES["photo"]["type"]; 
     $filesize = $_FILES["photo"]["size"]; 

     // Verify file extension 
     $ext = pathinfo($filename, PATHINFO_EXTENSION); 
     if(!array_key_exists($ext, $allowed)) die("Error: Please select a valid file format."); 

     // Verify file size - 5MB maximum 
     $maxsize = 5 * 1024 * 1024; 
     if($filesize > $maxsize) die("Error: File size is larger than the allowed limit."); 

     // Verify MYME type of the file 
     if(in_array($filetype, $allowed)){ 
      // Check whether file exists before uploading it 
      if(file_exists("upload/" . $_FILES["photo"]["name"])){ 
       echo $_FILES["photo"]["name"] . " is already exists."; 
      } else{ 
       move_uploaded_file($_FILES["photo"]["tmp_name"], "upload/" . $_FILES["photo"]["name"]); 
       echo "Your file was uploaded successfully."; 
      } 
     } else{ 
      echo "Error: There was a problem uploading your file - please try again."; 
     } 
    } 
} else{ 
    echo "Error: Invalid parameters - please contact your server administrator."; 
} 
?> 

試試上面的代碼它可能工作。