Головная боль при загрузке файлов PHP - PullRequest
1 голос
/ 14 октября 2010

Мне трудно загружать файлы через PHP.

Моя форма:

<form action="blah.php" enctype="multipart/form-data" method="post">
<p> Upload file: <input type="file" name="xmlfile"/>
<input type="submit" name="upload_submit" value="Upload" /> </p>
</form>

Контрольный список:

  • Нет «умных» цитат в поле зрения. Хорошо.

  • Правильный энтип. Хорошо.

  • имя атрибута во входном теге. Хорошо.

  • Мой каталог /tmp имеет следующие разрешения: drwxrwxrwt. Хорошо.

  • post_max_size = 50M, upload_max_filesize = 50M, file_uploads = Вкл. Хорошо.

print_r($_FILES) дает Array(). Бесполезный. Пробовал на изображениях, xml файлах и т. Д. Ничего не работает.

Что я еще не понимаю, так это то, что есть страницы, на которых загрузка файлов работает на одном сервере. Единственное, что отличается от того, что я могу собрать, - это то, что на странице, над которой я работаю, есть несколько других форм, которые не имеют enctype="multipart/form-data". Должно ли это иметь значение?

PHP-код по запросу:

if($_SERVER['REQUEST_METHOD'] == 'POST'){
    if(isset($_POST['upload_submit'])){
        print_r($_FILES);
        exit();

        ...
    }
}

Дает пустой массив независимо от позиции print_r; Я тоже попробовал сразу после if($_SERVER['REQUEST_METHOD'] == 'POST'){

Ответы [ 3 ]

0 голосов
/ 14 октября 2010

ваш, этот php-скрипт (как blah.php)

edit для отладки, dump $_POST if is false

<code>error_reporting(E_STRICT);
ini_set('display_errors', 'on');

if(array_key_exists('xmlfile', $_FILES)) {
   echo 'file ' , $_FILES['xmlfile']['name'] , ' recieved';
   echo '<pre>'
      , print_r($_POST, true)
      , print_r($_FILES, true)
      , '
';} else {echo '
'
      , print_r($_POST, true)
      , '
';}

(возможно) вывод:

file rapid-gui-development-with-qtruby_p1_4.mobi recieved
Array
(
    [upload_submit] => Upload
)
Array
(
    [xmlfile] => Array
        (
            [name] => rapid-gui-development-with-qtruby_p1_4.mobi
            [type] => application/octet-stream
            [tmp_name] => /private/tmp/phpEyV3vy
            [error] => 0
            [size] => 556846
        )

)
0 голосов
/ 14 октября 2010

Вы упоминаете о наличии других форм на странице ... они правильно закрыты? Например, если у вас есть:

<form method="post">
    blah blah blah
    <input type="submit" />
<!-- oops forgot to </form> here -->
<form method="post" enctype="multipart/form-data">
    ...
    <input type="submit" />
</form>

Тогда тег FIRST <form> может иметь приоритет и отправляться без установленного энтипа.

Если вы используете Firefox, я бы предложил использовать Firebug / HTTPFox / LiveHTTPHeaders (все они доступны в библиотеке надстроек FF), чтобы увидеть, что отправляется по сети, и запустить вашу страницу через валидатор, чтобы убедиться, что никаких глупых ошибок HTML, вызывающих это.

0 голосов
/ 14 октября 2010

Вы уверены, что отправляете правильную форму или имеете дело с предоставленными данными в нужном месте / сценарии? Пожалуйста, предоставьте часть кода PHP.

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