Ayola.net
Новости: В связи с обилием спама, постинг на форуме временно закрыт.

Для связи с поддержкой используйте тикеты в панели управления.
 
*
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь. Август 20, 2017, 12:46:03


Войти


Страниц: [1]
  Печать  
Автор Тема: Загрузка файлов через форму отправки  (Прочитано 13321 раз)
0 Пользователей и 1 Гость смотрят эту тему.
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« : Апрель 22, 2008, 16:07:30 »

Добрый день! Может кто-нибудь из тех, кто не использует шаблоны, а сам на рнр пишет сталкивался с подобным и подскажет.
Суть в чём: хочу сделать возможность загружать на сайт файлы не через фтп, а через форму "Выбрать файл и отправить". Пробую повторить идеологию точь-в-точь согласно мануалу http://php.nukefiles.ru/file-upload.html
Форма:
Код:
<form enctype="multipart/form-data" action="index.php" method="post">
<table cellpadding=10 border=0>
<tr><td align="center"><h3>Закачка нового файла:</h3></td></tr>
<tr><td>
<input type=hidden name=MAX_FILE_SIZE value=10000>Выбери файл: <input name=userfile type=file size=50>
</td></tr>
<tr><td align="center"><input type=submit value="Отправить"></td></tr>
</table>
</form>
Обработчик:
Код:
if (isset($userfile)):
echo "<h3>Информация о переданном файле:</h3>";
echo "<p>Переменная _FILES:";
echo "<p>userfile_name= ".$_FILES['userfile']['name']."<br>";
echo "userfile_type= ".$_FILES['userfile']['type']."<br>";
echo "userfile_size= ".$_FILES['userfile']['size']."<br>";
echo "userfile_tmp_name= ".$_FILES['userfile']['tmp_name']."<br>";
echo "userfile_name= ".$_FILES['userfile']['name'];
//  проверяем загрузился ли файл и если да - перемещаем его
$target=getcwd()."/Uploaded";
if (filetype($target)!="dir") mkdir($target,0777);
if (is_uploaded_file($_FILES['userfile']['tmp_name'])):
  move_uploaded_file($_FILES['userfile']['tmp_name'],$target);
  //copy($_FILES['userfile']['tmp_name'],$target);
else:
 echo "<p><font color=\"red\">Не удалось загрузить файл ".$_FILES['userfile']['name'];
endif;
endif;
В результате получается, что переданный файл распознаётся, функция is_uploaded_file false не возвращает, однако в папку Uploaded файл не перемещается и не копируется (хотя специально права в 777 ставлю).

Денвер подсказывает что:
Цитировать
Warning: move_uploaded_file(...) [function.move-uploaded-file]: failed to open stream: Permission denied in z:\home\...\index.php on line 30
Мол не могу открыть поток - в доступе отказано ... как ему доступ дать чтобы заработал, а?  Непонимающий
Записан
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #1 : Апрель 22, 2008, 16:22:35 »

для анализа применять
Код:
switch($_FILES['uploadFile']['error']) {
case 1 : $ansver = "The uploaded file exceeds the upload_max_filesize directive in php.ini.";
break;
case 2 : $ansver = "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form.";
break;
case 3 : $ansver = "The uploaded file was only partially uploaded.";
break;
case 4 : $ansver = "No file was uploaded.";
break;
case 6 : $ansver = "Missing a temporary folder.";
break;
case 7 : $ansver = "Failed to write file to disk";
break;
case 8 : $ansver = "File upload stopped by extension";
break;
};

if ($_FILES['uploadFile']['error'] == "0") {
$ansver .= "* Получен файл [".$_FILES['uploadFile']['name']."]  размером ".$_FILES['uploadFile']['size']." байт \n* Mime-тип ".$_FILES['uploadFile']['type']." файла \n* временное имя ".$_FILES['uploadFile']['tmp_name']." файла \n* Ошибка ".$_FILES['uploadFile']['error']."*$upfile*";
if ($_FILES['uploadFile']['size'] != "0") {
/////////////////////////////////
// $ansver .= move_uploaded_file($_FILES["uploadFile"]["tmp_name"], "site/uploads/" . $_FILES["uploadFile"]["name"]);
if (move_uploaded_file($_FILES['uploadFile']['tmp_name'], $upfile)) {
$ansver .= "File is valid, and was successfully uploaded.\n";
} else {
$ansver .= "Possible file upload attack!\n";
}

// $ansver .= file_get_contents($_FILES["uploadFile"]["tmp_name"]);
/////////////////////////////////
};
};
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #2 : Апрель 22, 2008, 16:42:06 »

Спасибо! Улыбающийся Сейчас попробую...
... кстати,
Цитировать
if ($_FILES['uploadFile']['error'] == "0")
можно в виде ещё одной секции
Цитировать
switch ... case 0: ...
оформить - было бы по-коду более структурно
Записан
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #3 : Апрель 22, 2008, 17:47:44 »

Всё! Я понял в чём была моя ошибка - в функции move_uploaded_file я указывал только каталог куда надо файл перемещать и не указывал имя файла, тоесть надо не так:
Код:
$target=getcwd()."/Uploaded";
if (move_uploaded_file($_FILES['userfile']['tmp_name'],$target)) ...
а так:
Код:
$target=getcwd()."/Uploaded/".$_FILES['userfile']['name'];
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $target)) ...
Спасибо atimur за то, что натолкнул на мысль! Подмигивающий

Но это ещё не все  Смеющийся
Тут http://php.nukefiles.ru/configuration.html#ini.post-max-size пишут что:
Цитировать
Элемент MAX_FILE_SIZE не может специфицировать размер файлов больше того размера файла, который может быть установлен в ini-установке upload_max_filesize. По умолчанию 2 Мегабайта.

Если включено ограничение памяти, может понадобиться увеличение memory_limit. Установите memory_limit достаточно большим.

Если max_execution_time установлено слишком маленькое, выполнение скрипта может превысить это значение. Установите max_execution_time достаточно большим.

Если post_max_size слишком мал, большие файлы нельзя будет загружать. Установите post_max_size достаточно большим.
Однако ж - эти параметры устанавливаются в php.ini к которому, я так понимаю, нас на хостинге никто не допустит ... как быть если надо закачать файл, скажем, размером 20 Мбайт?
Записан
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #4 : Апрель 23, 2008, 14:21:38 »

Продолжаю "воевать" с загрузкой больших файлов Улыбающийся

Нашёл тут http://php.nukefiles.ru/configuration.html следующее:
Цитировать
При использовании PHP как Apache-модуля вы можете также изменить установки конфигурации, используя директивы файлов конфигурации Apache и файлы .htaccess. Вам для этого необходимы привилегии "AllowOverride Options" или "AllowOverride All".
Создаю в корне файл .htaccess и помещаю в него
Код:
<IfModule mod_php4.c>
php_value memory_limit 20000000
php_value upload_max_filesize 20000000
php_value post_max_size 15000000
</IfModule>
<IfModule mod_php3.c>
php3_memory_limit 20000000
php3_upload_max_filesize 20000000
php3_post_max_size 15000000
</IfModule>
Предварительно проверяю через http://htaccess.cwx.ru/ - первая секция удаляется как ошибочная, так что оставляю только вторую:
Код:
<IfModule mod_php4.c>
</IfModule>
<IfModule mod_php3.c>
php3_memory_limit 20000000
php3_upload_max_filesize 20000000
php3_post_max_size 15000000
</IfModule>
В результате, так как надо оно работать не хочет, почему-то изменило параметры на вот такие (даже зачем-то max_execution_time поменяло, хотя я об этом не просил):
Цитировать
upload_max_filesize= 30M
memory_limit= 38M
max_execution_time= 9
post_max_size= 8M
после чего на дальнейшие изменения в .htaccess вообще не реагирует ...

Может я что не так делаю? Может так впринципе делать нельзя? Может не этих самых привелегой "AllowOverride Options" или "AllowOverride All"? Кто-нибудь с чем-то подобным сталкивался?
Записан
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #5 : Апрель 23, 2008, 15:10:05 »

Код:
  if(!empty($_POST['maxsize'])) { $maxsize = $_POST['maxsize']; } else { };

if(empty($maxsize)) {
$maxsize = ini_get('upload_max_filesize');
$POST_MAX_SIZE = ini_get('post_max_size');
if ($maxsize > $POST_MAX_SIZE) { $maxsize = $POST_MAX_SIZE; };
};

if (!is_numeric($maxsize)) {
    if (strpos($maxsize, 'M') !== false)
        $maxsize = intval($maxsize)*1024*1024;
    elseif (strpos($maxsize, 'K') !== false)
        $maxsize = intval($maxsize)*1024;
    elseif (strpos($maxsize, 'G') !== false)
        $maxsize = intval($maxsize)*1024*1024*1024;
}
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #6 : Апрель 23, 2008, 15:31:53 »

atimur, я немного не понял, твой скрипт в результате всех этих операций установит значение локальной переменной $maxsize. Это хорошо, но как это решит проблему загрузки файлов, чей размер превышает установленный в post_max_size = 8M (по-умолчанию).
Эта строка
Код:
$POST_MAX_SIZE = ini_get('post_max_size');
вернёт 8М, а я как-бы хочу переопределить значение post_max_size (ну и некоторых других) в сторону увеличения хотя бы до 15-ти мегабайт.

ini_get() - только читает значения в php.ini установленные, если б было что-то на манер ini_set(value) - тогда бы всё было ясно. Я подозреваю, что через .htaccess это можно сделать, но практически сделать это не получается ... может я тебя (твой код) не так понял, ты словами скажи (я пойму) Улыбающийся

Записан
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #7 : Апрель 23, 2008, 15:40:53 »

Скрипт токо определяет переменные установленные.Потом можно их в форму отправки файла спихнуть.

Код:
ini_set('post_max_size', '16777216');
может и работает я его не проверял тут.
« Последнее редактирование: Апрель 23, 2008, 15:58:18 от atimur » Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #8 : Апрель 23, 2008, 15:50:17 »

Ты хочешь сказть, что функция ini_set() существует (в справочнике я нашёл только get, а set - это я просто как пример желаемого привёл) и что у тебя был опыт работы с ней, только не ТУТ, а где-то "ТАМ"?
Записан
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #9 : Апрель 23, 2008, 15:52:40 »

http://php.ru/manual/function.ini-set.html
http://php.ru/manual/ini.html#ini.list
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #10 : Апрель 23, 2008, 18:34:17 »

Ага, щяс...
Не просто так же лимит установили. Улыбающийся
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #11 : Апрель 23, 2008, 18:54:02 »

Ну я же в хорошем смысле Улыбающийся -> "чем бы дитя не баловалось, лишь бы не плакало".
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #12 : Апрель 23, 2008, 19:11:15 »

support@ayola.ru, если я Вас правильно понял, то что я пытаюсь сделать - впринципе технически ТУТ недостижимо? А если с помощью фтп-функций?
Записан
support@ayola.net
Вне категорий
Маэстро
*****

Карма: 267
Сообщений: 4901



Просмотр профиля WWW
« Ответ #13 : Апрель 23, 2008, 20:05:58 »

Можно.
Эти, разнообразны, net2ftp, же работают.
Записан

Бесплатный хостинг с PHP и MySQL

Вопросы и ответы - http://faq.ayola.net
Правка .htaccess - http://htaccess.ayola.net
Техподдержка - http://www.ayola.net/panel/tickets.php
По вопросам хостинга личные сообщения не пишите. Для этого есть тикеты.
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #14 : Апрель 23, 2008, 20:22:37 »

Спасибо, support@ayola.ru, начинаю "видеть свет в конце тунеля" Улыбающийся
Цитировать
Эти, разнообразны, net2ftp, же работают.
При работе с net2ftp через панель управления при закачке файла указано:
Цитировать
Ограничения:
Максимальный размер одного файла ограничен net2ftp до 48828.125 Кб и PHP до 50M
Максимальное время выполнения 240 секунд
Я хочу сделать так, чтобы пользователи могли закачивать свои файлы (до 20-ти Мб) средствами сайта (не панели управления) - вопрос: могу я расчитывать на то, что применяя в своём php-скрипте фтп-функции, ограничения на размер будут такие же как при работе с этим же фтп из панели управления?
Записан
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #15 : Апрель 25, 2008, 16:07:46 »

Что-то с фтп-функциями тоже не всё ладится - такая вот простая операция в тестовом index.php файле:
Код:
<?
$conn=ftp_connect("ftp-4.ayola.net");
if (!$conn):
echo "<p>Невозможно соединиться с ФТП-сервером!";
die;
else:
echo "<p>Cоединение установленно";
endif;
ftp_close($conn);
?>
зависает уже на этапе подключения даже не доходя то пароля/логина Грустный

1. Можно ли вообще из своего скрипта с фтп-сервером работать?
2. По-умолчанию порт 21-й используется или надо другой указывать ftp_connect("ftp-4.ayola.net",$port) ?
3. Может какие-то глобальные разрешения нужды?

Народ, вы ж умные, вы всё знаете, подскажите плиз, а!  Строит глазки
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #16 : Апрель 25, 2008, 20:59:45 »

Народ, вы ж умные, вы всё знаете, подскажите плиз, а!  Строит глазки
А скажите мне, уважаемый, вам неприменно надо с FTP долбиццо, т.е. отправка файлов через форму вас не устраивает по религиозным соображениям? Улыбающийся
Записан

Гамлета здесь больше нет. Осталась только тень.
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #17 : Апрель 25, 2008, 21:11:23 »

А скажите мне, уважаемый, вам неприменно надо с FTP долбиццо, т.е. отправка файлов через форму вас не устраивает по религиозным соображениям? Улыбающийся
Его неустраивает максимальный размер установленный в php.ini ('upload_max_filesize' 'post_max_size') Админами.)) бгг
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #18 : Апрель 26, 2008, 01:23:38 »

Astraller, вот ты умный человек, я знаю, вот скажи, как ты думаешь, стал бы я долбиццо с фтп, если бы с помощью формы отправки (работу с которой я вполне освоил для файлов малого размера) у меня бы получилось сделать то что я хочу? Могу ещё раз озвучить свою цель (мне не сложно, тем более, что после тёх раз её озвучивания в этой теме - разом больше-разом мешьше уже не принципиально) - я хочу найти способ расширить себе квоту на максимальный размер загружаемого на сервер файла средствами сайта - будь то фтп-функции, будь то upload формы отправки. Я не просто воспрошаю потому как мне лень разбираться , я прошу подсказать возможно ли это впринципе или нет.

Вот ты бы на моём месте как бы грузил на свой сайт файл размером 20-ть Мб не через админ-панель (нельзя ж каждому пользователя раздавать все реквизиты доступа к нему!) ? Надо чтобы они просто выбрали свой локальный файл и нажали отправить - а дальше скрипт отработает и загрузит ... через фтп-функции, как я писал, не коннектится, через upload - не получается обойти квоту ... вот в чём вопрос ... а ты говоришь "долбиццо" ... Улыбающийся Если ты обратил внимание, я веду себя очень корректно, вопросы задаю предельно конкретно, привожу примеры и вообще ...
Записан
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #19 : Апрель 26, 2008, 01:25:38 »

atimur, у админов, я думаю, и без меня забот хватает ... разве что расширение квоты - не вопрос финансов...
Записан
atimur
Просветлённый
****

Карма: 59
Сообщений: 990


Живу в SanCity


Просмотр профиля WWW
« Ответ #20 : Апрель 26, 2008, 01:35:14 »

1. Можно ли вообще из своего скрипта с фтп-сервером работать?
2. По-умолчанию порт 21-й используется или надо другой указывать ftp_connect("ftp-4.ayola.net",$port) ?
3. Может какие-то глобальные разрешения нужды?
Я вот думаю, если очень нада то можно ж вопросы через Тикеты Админам задать. Он все разжуют.
Записан

- Правда, она всегда глаза режет...
- Капча - Идите лесом...
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #21 : Апрель 26, 2008, 01:46:17 »

atimur, ещё раз тебе большое спасибо за участие Улыбающийся, но я как-бы не хочу себе выбивать каких-то особых преференций - я просто хочу понять что ТУТ можно, а что нет - только и всего ... ответа на мой вопрос в поиске по форуму я не нашёл, и для моего сайта тут имеющегося это не критично (я там сам себе админ и спокойно через панель управления всё это решаю), мне интересно на перспективу - если "ДА", то я смогу реализовать кое-какую задумку не лично для себя, а для других людей ... если нет - то буду искать другие варианты ... это примерно как с тегом </body> - пока с проблемой не столкнёшься - про неё не догадываешься Улыбающийся
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #22 : Апрель 26, 2008, 01:58:18 »

Astraller, вот ты умный человек, я знаю, вот скажи, как ты думаешь, стал бы я долбиццо с фтп, если бы с помощью формы отправки (работу с которой я вполне освоил для файлов малого размера) у меня бы получилось сделать то что я хочу? Могу ещё раз озвучить свою цель (мне не сложно, тем более, что после тёх раз её озвучивания в этой теме - разом больше-разом мешьше уже не принципиально) - я хочу найти способ расширить себе квоту на максимальный размер загружаемого на сервер файла средствами сайта - будь то фтп-функции, будь то upload формы отправки. Я не просто воспрошаю потому как мне лень разбираться , я прошу подсказать возможно ли это впринципе или нет.
Покурил я это дело, очень странно, но функции просто напросто не работают, т.е. они просто не возвращают ошибок. Как работает net2ftp - для меня загадка.

PS А в тикеты вас отправляли затем что-бы эти вопросы вы задали там, ибо привелегий там просить бесполезно.
Записан

Гамлета здесь больше нет. Осталась только тень.
dimdimon
Новичёк
*

Карма: 1
Сообщений: 48


Просмотр профиля
« Ответ #23 : Апрель 26, 2008, 02:37:39 »

Цитировать
очень странно, но функции просто напросто не работают, т.е. они просто не возвращают ошибок
вот-вот! мало того что не возврящают ошибки - они просто зависают ... сужу по тому простому примеру, что выше приводил
Цитировать
Как работает net2ftp - для меня загадка
выходит я не зря поднял тему Подмигивающий

а вот тех.поддержка говорит что:
Цитировать
Ответ #13 : Апреля 23, 2008, 20:05:58 pm
Можно.
Эти, разнообразны, net2ftp, же работают.
... а ты (Вы) говоришь "тикеты" ... вот ответят в тикетах подобным образом и буду я потом с полной уверенностью что "они разнообразны" долбиццо с функциями, а как они работают (или точнее не работают) - загадка, а второй раз спрашивать вроде как неудобно ... мне кажется эта тема не так проста как кажется на первый взгляд и результат обсуждения будет не только мне полезно узнать Улыбающийся Ведь даже на шаблонном сайте народ может с таким столкнуться или я не прав?
Записан
Astraller™
Маэстро
*****

Карма: 151
Сообщений: 1389

Вселенское зло


Просмотр профиля WWW
« Ответ #24 : Апрель 26, 2008, 11:31:54 »

... а ты (Вы) говоришь "тикеты" ... вот ответят в тикетах подобным образом и буду я потом с полной уверенностью что "они разнообразны" долбиццо с функциями, а как они работают (или точнее не работают) - загадка, а второй раз спрашивать вроде как неудобно ... мне кажется эта тема не так проста как кажется на первый взгляд и результат обсуждения будет не только мне полезно узнать Улыбающийся Ведь даже на шаблонном сайте народ может с таким столкнуться или я не прав?
Дело в том что поддержка на форуме уже довольно давно не существует как класс. Поддержка _только_ в тикетах, а здесь - общение. Напишите тикет, укажите точную проблему, и вам помогут её решить.
Записан

Гамлета здесь больше нет. Осталась только тень.
Страниц: [1]
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.13 | SMF © 2006, Simple Machines LLC

2003-2008 © ООО "Инфотур" - Бесплатный хостинг Ayola.net
Valid XHTML 1.0! Valid CSS! Dilber MC Theme by HarzeM
Страница сгенерирована за 0.125 секунд. Запросов: 17.