2015-03-17 2 views
0

У меня проблемы с загрузкой zip-файлов и, похоже, не найти ответа. Index.phpзагрузка zip-файлов с PHP, неопределенный индекс

<form id="convertFile" action="convert.php" method="post" enctype="multipart/form-data"> 
    <div class="form-group"> 
     <label for="exampleInputFile">File input</label> 
     <input name="upload" type="file" id="inputFile"> 
    </div> 
    <div class="form-group"> 
     <button type="submit">Submit</button> 
    </div> 
</form> 

convert.php:

if(isset($_FILES)){ 
    echo $_FILES['upload']['name']; 
}else{ 
    echo json_encode(array('status'=>'error')); 
} 

Когда я загрузить файл почтового индекса, я получаю: Примечание: Undefined индекс: закачивать в C: \ WAMP \ WWW \ xmlconverter \ новообращенного. PHP на линии 3

Это то, что хром показывает в заголовке сообщения:

------WebKitFormBoundaryuFNy5dZtFj7olmD5 
Content-Disposition: form-data; name="zip_file"; filename="123.zip" 
Content-Type: application/x-zip-compressed 


------WebKitFormBoundaryuFNy5dZtFj7olmD5-- 

Это работает в любом другом формате больших файлов, но не может заставить его прочитать zip-файл. Если я var_dump $ _FILES или $ _POST, они пусты.

Что мне не хватает? Почему все остальные файлы работают, но zip не работает.

Спасибо

с помощью WAMP и PHP 5.5.12

ответ

-1

Это эхо $ _FILES [ 'загрузка'] [ 'tmp_name'];

+0

'tmp_name' предназначен для временного размещения. 'name' будет отображать имя файла. это простой тест, чтобы убедиться, что файл читается правильно. –

0

Где ваше определение типа файла zip?

В любом случае, пусть говорят, что это была форма HTML, чтобы загрузить файлы почтового индекса вы хотите иметь следующее:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>Untitled Document</title> 
</head> 

<body> 
<?php if($message) echo "<p>$message</p>"; ?> 
<form enctype="multipart/form-data" method="post" action=""> 
<label>Choose a zip file to upload: <input type="file" name="zip_file" /></label> 
<br /> 
<input type="submit" name="submit" value="Upload" /> 
</form> 
</body> 
</html> 

На стороне сервера скрипт, который обрабатывает почту вы бы:

<?php 
if($_FILES["zip_file"]["name"]) { 
    $filename = $_FILES["zip_file"]["name"]; 
    $source = $_FILES["zip_file"]["tmp_name"]; 
    $type = $_FILES["zip_file"]["type"]; 

    $name = explode(".", $filename); 
    $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); 
    foreach($accepted_types as $mime_type) { 
     if($mime_type == $type) { 
      $okay = true; 
      break; 
     } 
    } 

    $continue = strtolower($name[1]) == 'zip' ? true : false; 
    if(!$continue) { 
     $message = "The file you are trying to upload is not a .zip file. Please try again."; 
    } 

    $target_path = "/home/var/yoursite/httpdocs/".$filename; // change this to the correct site path 
    if(move_uploaded_file($source, $target_path)) { 

     //if you also wanted to extract the file after upload 
     //you can do the following 

     $zip = new ZipArchive(); 
     $x = $zip->open($target_path); 
     if ($x === true) { 
      $zip->extractTo("/home/var/yoursite/httpdocs/"); // change this to the correct site path 
      $zip->close(); 

      unlink($target_path); 
     } 
     $message = "Your .zip file was uploaded and unpacked."; 
    } else {  
     $message = "There was a problem with the upload. Please try again."; 
    } 
} 
?> 
+0

Уже пробовал этот скрипт. Он не пройдет мимо первого $ _FILE ["zip_file"], он выдает ту же ошибку. –

+0

Что вы получаете, когда используете print_r ($ _ POST) в своем скрипте на стороне сервера? Прокомментируйте все и попытайтесь увидеть, какие файлы они печатают. – unixmiah

+0

Печать как $ _POST, так и $ _FILES возвращает пустой массив. –

-1

Попробуйте проверки и регулировки значения post_max_size в файле php.ini, это работает для меня, как по умолчанию 3М, поднял значение 128M, и все было радужно

+0

Было бы лучше как комментарий. –

+0

Как уже упоминалось.Это формат файла, а не размер –

+0

. Я понимаю, но я столкнулся с подобной проблемой, и это было мое решение, искренние извинения, если бы не было вопроса к вопросу, я на самом деле новичок в этом, в моем собственном случае, я получил пустая страница с аналогичной ошибкой «undefined index», когда я попытался загрузить, после внесения корректировки заявил, что у меня никогда не было проблемы с загрузкой zipfiles снова –

0

Я использовал сценарий очень s imilar к одному, отправленному @unixmiah без проблем на моем сервере на базе cPanel. Работал отлично (и уже на год), но столкнулся с проблемой ошибки «PHP, undefined index» при локальном использовании с wamp.

Вот мод, который работал для меня:

<?php 
function rmdir_recursive($dir) { 
foreach(scandir($dir) as $file) { 
if ('.' === $file || '..' === $file) continue; 
if (is_dir("$dir/$file")) rmdir_recursive("$dir/$file"); 
else unlink("$dir/$file"); 
} 
rmdir($dir); 
} 
if(!empty($_FILES)){ 

//added above to script and closing } at bottom 

if($_FILES["zip_file"]["name"]) { 
    $filename = $_FILES["zip_file"]["name"]; 
    $source = $_FILES["zip_file"]["tmp_name"]; 
    $type = $_FILES["zip_file"]["type"]; 

    $name = explode(".", $filename); 
    $accepted_types = array('application/zip', 'application/x-zip-compressed', 'multipart/x-zip', 'application/x-compressed'); 
    foreach($accepted_types as $mime_type) { 
     if($mime_type == $type) { 
      $okay = true; 
      break; 
     } 
    } 

    $continue = strtolower($name[1]) == 'zip' ? true : false; 
    if(!$continue) { 
     $message = "<b>The file you are trying to upload is not a .zip file! Please try again...</b>"; 
    } 

    $target_path = "somedir/somesubdir/".$filename; // change this to the correct site path 
    if(move_uploaded_file($source, $target_path)) { 
     $zip = new ZipArchive(); 
     $x = $zip->open($target_path); 
     if ($x === true) { 
      $zip->extractTo("somedir/somesubdir/"); // change this to the correct site path 
      $zip->close(); 

      unlink($target_path); 
     } 
     $message = "<h2>ZIP file was uploaded and content was replaced!</h2>"; 
    } else {  
     $message = "There was a problem with the upload. Please try again."; 
    } 
} 
} 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<title>QikSoft ZIP Upper</title> 
</head> 

<body> 
<?php if(!empty($message)) echo "<p>$message</p>"; ?> 
<form enctype="multipart/form-data" method="post" action=""> 
<label><h3>Upload Your ZIP:</h3> <input type="file" name="zip_file" /></label> 
<br /><br /> 
<input type="submit" name="submit" value="START UPLOAD" /> 
</form> 
</body> 
</html> 

отметить также, что эхо-сообщение было изменено:

<?php if(!empty($message)) echo "<p>$message</p>"; ?> 

Одна вещь, которая не работает это ограничение файла. В настоящее время допускается использование других типов помимо ZIP. Будьте очень благодарны всем, у кого есть проблемы с исправлением.

Смежные вопросы