2010-02-23 3 views
2

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

У меня очень простая форма, в которой я не мог заставить ее работать в некоторых случаях. Страница остается на 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-код (прокомментировал все), чтобы увидеть, даже когда ничего не сделано, но это не так.

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

ответ

0

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

+0

Я пытаюсь загрузить то же место, что и файл php.wwwroot. что вы подразумеваете под правильными настройками загрузки. есть ли такая настройка в IIS. – murphy

0

Я думаю, что ваш 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"; 
} 

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

Если положить ваши проблемы вы пытаетесь неблокируемому ставить с 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

Я попробовал. но все же ничего в файлах размером более 2 3 КБ даже 10 КБ файлов не может загружаться. это все еще тайм-ауты. Как я уже говорил, я попробовал несколько файлов, таких как 1 2 kb, и он загружает. Я уже пытаюсь txt-файлы различных размеров, но не могу загрузить. – murphy

+0

@murphy Даже после добавления тайм-аута FTP сценарий не работает? Вы можете попробовать сбросить его до 10 секунд. – nortron

+0

, если я запускаю свой скрипт с сервера (например, http: //localhost/3.php), он отлично работает, но таймауты при попытке от клиента (http://10.47.47.1/3.php от клиента 10.47.47.13) я думаю, что это могут быть права доступа к папкам или ограничения, блокирующие процесс загрузки. Я не изменял папку upload_tmp в php.ini, поэтому это windows/temp. – murphy

0

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

0

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

0

Вы можете иметь низкий предел FileSize. Чтобы проверить это: создать новый файл PHP, называется info.php или что-то и просто написать

<?php 
phpinfo(); 
?> 

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

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

  • Нет связанных вопросов^_^