Проблема с загрузкой нескольких файлов - PullRequest
0 голосов
/ 23 июня 2009

Вот код, который я использую. Кажется, я не вижу, в чем проблема - она ​​предназначена для загрузки нескольких файлов из одного. Самое смешное, что иногда он загружает только один файл, а потом ничего не загружает.

Может кто-нибудь помочь мне разобраться, пожалуйста ...

<pre><code>
<?php

/*** the upload directory ***/
$upload_dir= './uploads';

/*** numver of files to upload ***/
$num_uploads = 5;

/*** maximum filesize allowed in bytes ***/
$max_file_size  = 999999951200;

/*** the maximum filesize from php.ini ***/
$ini_max = str_replace('M', '', ini_get('upload_max_filesize'));
$upload_max = $ini_max * 99999991024;

/*** a message for users ***/
$msg = 'Please select files for uploading';

/*** an array to hold messages ***/
$messages = array();

/*** check if a file has been submitted ***/
if(isset($_FILES['userfile']['tmp_name']))
{
    /** loop through the array of files ***/
    for($i=0; $i < count($_FILES['userfile']['tmp_name']);$i++)
    {
        // check if there is a file in the array
        if(!is_uploaded_file($_FILES['userfile']['tmp_name'][$i]))
        {
            $messages[] = 'No file uploaded';
        }
        /*** check if the file is less then the max php.ini size ***/
        elseif($_FILES['userfile']['size'][$i] > $upload_max)
        {
            $messages[] = "File size exceeds $upload_max php.ini limit";
        }
        // check the file is less than the maximum file size
        elseif($_FILES['userfile']['size'][$i] > $max_file_size)
        {
            $messages[] = "File size exceeds $max_file_size limit";
        }
        else
        {
            // copy the file to the specified dir 
            if(@copy($_FILES['userfile']['tmp_name'][$i],$upload_dir.'/'.$_FILES['userfile']['name'][$i]))
            {
                /*** give praise and thanks to the php gods ***/
                $messages[] = $_FILES['userfile']['name'][$i].' uploaded';
            }
            else
            {
                /*** an error message ***/
                $messages[] = 'Uploading '.$_FILES['userfile']['name'][$i].' Failed';
            }
        }
    }
}
?>
<!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" xml:lang="en" lang="en">
<head>
<title>Multiple File Upload</title>
</head>

<body>

<h3><?php echo $msg; ?></h3>

<p>
<?php
 if(sizeof($messages) != 0)
 {
    foreach($messages as $err)
    {
        echo $err.'<br />';
    }
 }
?>
</p>

<form enctype="multipart/form-data" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $upload_max; ?>" />
<?php
$num = 0;
while($num < $num_uploads)
{
    echo '<div><input name="userfile[]" type="file" /></div>';
    $num++;
}
?>
<input type="submit" value="Upload" />
</form>

</body>
</html>

1 Ответ

1 голос
/ 23 июня 2009

Прежде всего, не используйте copy () для перемещения файлов. Для этого существует функция с именем move_uploaded_file (). Эта функция проверяет, действительно ли файл был загружен, и предотвращает перемещение файлов, которые не должны быть перемещены.

второй. Посмотрите на значение ошибки каждого загруженного файла, так как вы можете вызвать некоторые ошибки при загрузке.

Update.

Попробуйте срубить ваше решение до голых костей. Пропустите сообщение об ошибке, пока оно не заработает. Это поможет вам понять, что именно является «мясом» и «картошкой» в коде, и поможет вам правильно отработать эту часть, прежде чем обойти возможные ошибки.

2-е обновление.

Вот минимизированная версия вашего кода. У меня это работает.

http://cznp.com/1032712.phps

Мне также нужно было сделать папку, которую я пишу, доступной для записи для моего веб-сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...