Странная проблема с загрузкой файлов PHP - PullRequest
2 голосов
/ 23 февраля 2010

У меня странные проблемы с загрузкой файлов в моей системе Windows. Я использую Windows 7 с iis7 на сервере. Я пытаюсь на клиентском компе с локальным IP 10.47.47.13, а сервер - 10.47.47.1.

У меня очень простая форма, которую я не мог заставить работать в некоторых случаях. Страница остается на wwwroot. (http://10.47.47.1/3.php)

3.php

<?php
 $source_file=$_FILES["newsimg"]["tmp_name"];   
 $destination_file="123.jpg";
 $ftp_server="localhost";
 $ftp_username="admin";
 $ftp_password="apple";

  if ($source_file!="") {
    $mrph_connect = ftp_connect($ftp_server,21);
    $mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
    if (($mrph_connect) && ($mrph_login)) {
      $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
      if ($upload) echo "ok"; else echo "nok";
    }
  }

?>

<body>
<form enctype="multipart/form-data" action="3.php" method="POST">
  <input type=file  name=newsimg>
  <input type=submit name=mrph>
</form>
</body>

Форма вызывает себя для загрузки файла. Когда я выбираю файл размером 1 или 2 КБ, он работает, но когда я выбираю файл размером даже 10 15 КБ, через некоторое время страницы задерживаются. Я проверил, включена ли загрузка файла настроек php.ini, для проверки я установил временную папку c:\uploads. КАК Я СКАЗАЛ, ЭТО РАБОТАЕТ ДЛЯ ФАЙЛОВ РАЗМЕРА 1 ИЛИ 2 КБ, НО ДАЖЕ, КОГДА Я ВЫБИРАЮ ФАЙЛ 10 ИЛИ 20 КБ Я даже удалил код PHP (прокомментировал все), чтобы видеть, даже когда ничего не сделано, это работает, но это не так.

Любая помощь будет оценена.

Ответы [ 5 ]

0 голосов
/ 11 августа 2010

Возможно, у вас низкий предел размера файла. Чтобы проверить это: создайте новый php-файл с именем info.php или любым другим и просто напишите

<?php
phpinfo();
?>

Откройте эту страницу в браузере и выполните поиск upload_max_filesize. Проверьте значение для этого; если это всего лишь несколько килобайт, это ваша проблема. Если это так, вам придется изменить php.ini (в Apache вы также можете использовать директиву в файле .htaccess, но я не думаю, что есть что-то подобное для IIS). Расположение этого файла может отличаться в зависимости от вашей установки, но, вероятно, C:\Windows\php.ini. Найдите директиву upload_max_filesize и измените ее на нечто большее. По умолчанию 2 мегабайта (2M), но вы можете сделать это как угодно.

0 голосов
/ 01 марта 2010

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

0 голосов
/ 23 февраля 2010

Я предполагаю, что ваш ftp_put истек, попробуйте установить порог тайм-аута FTP ниже значения по умолчанию PHP (30 секунд):

$mrph_connect = ftp_connect($ftp_server,21);

ftp_set_option($mrph_connect, FTP_TIMEOUT_SEC, 20);

$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
if (($mrph_connect) && ($mrph_login)) {
  $upload = ftp_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
  if ($upload) echo "ok"; else echo "nok";
}

Если в результате этой корректировки ваш скрипт возвращает 'nok', вы поймете, что пут занимает слишком много времени.

Если пут является вашей проблемой, попробуйте неблокируемый пут с ftp_nb_put для асинхронного FTP-файла:

$mrph_connect = ftp_connect($ftp_server,21);
$mrph_login= ftp_login($mrph_connect, $ftp_username, $ftp_password);   
if (($mrph_connect) && ($mrph_login)) {

  $ret = ftp_nb_put($mrph_connect, $destination_file, $source_file, FTP_BINARY);
  while ($ret == FTP_MOREDATA) {
    $ret = ftp_nb_continue($mrph_connect);
  }

  if ($ret == FTP_FINISHED) echo "ok"; else echo "nok";
}
0 голосов
/ 01 марта 2010

Я думаю, что Cryo использует что-то, может быть, файл php.ini неправильно настроен, а максимальный размер файла слишком мал?

0 голосов
/ 23 февраля 2010

Мне кажется, проблема в том, где вы загружаете свой файл, сервер; в загрузке нет ничего плохого, потому что вы способны загружать файлы меньшего размера, но при загрузке файлов размером 20 Кб не удается проверить, чтобы убедиться, что на сервере, который вы хотите загрузить, указаны правильные параметры загрузки файл в. Использование ftp и загрузка на другой сервер / в папку сама по себе является медленным процессом. Ваш код также кажется правильным.

...