Большой Воронежский Форум
» Программирование>php как загрузить файл на сервер?
Виктoр 22:38 25.02.2009
Делаю по примеру и книги Димки Котерова:
вот форма:
Код:
<body>
<form action=script.php method="POST" enctype=multipart/form-data>
Выберите файл:<br>
<input type=file name=File><br>
<br>
<input type=submit name=doUpload value="загрузить"><br>
</form>
</body>
вот скрипт script.php:
[PHP]
<?php

$ImgDir=strval($_POST['mtype']);
if (@$doUpload)
{

if (@file_exists($File))
{
Copy($File, "$ImgDir/".basename($File_name));
}
}
?>[/PHP]

Вроде все легко и просто до безобразия. Но! на виндовом апаче он у меня файлы загружает. На апаче, который я поднял под Линуксом(Debian) он файл почему-то принимать не хочет. вот эта переменная - $File_name почему-то оказывается пустой. не хотит принимать ни какие файлы, даже те, названия которых состоит из одних цифр. [Ответ]
Yandex 23:11 25.02.2009
Предположу
> <input type=File_name=File><br>
регистр в *nix обычно имеет значение. Ну еще бы проверил настройки папок на предмет "неправильных" кавычек и слешей в пути.
P.S. php почти не знаю. [Ответ]
Виктoр 01:04 26.02.2009
Yandex, нет. тут проблема не в путях. сейчас вообще убрал строку и strval($_POST['mtype']) задал папку "temp". Результат тот же. имя файла почему-то приходит пустым. я там задал форму такую, что к заргужаемому файлу приклепляется описание:
[PHP]$d=@opendir($tmp);
if(!$d)
{
mkdir($tmp);
}
chdir($tmp);
$fname="{$File_name}";
if (is_file("{$fname}.txt"))
{
$i=1;
while (is_file("{$fname}({$i}).txt")) {$i++;}
$fname.="({$i}).txt";
}
else
{
$fname.=".txt";
}
$tmp="docs/".$ImgDir;
$fname.=".txt";
$file=fopen($fname, "w+b");
$dat=date("Y,m,d,G:i D");
$str="{$_POST['name']}\n{$dat}\n{$_POST['text']}";
fwrite($file,$str);
fclose($file);[/PHP]

и все. переменные с полей name, text передаются. и по директории docs/console (в моем примере это имя переменной mtype) создается текстовик с правильным содержанием. но с именем ".txt". т.е. у меня имя имя файла в самом начале пустое.
$fname="{$File_name}";
Причем этот же скрипт под виндой-то работает.

Сообщение от :
<input type=File_name=File><br>

Это тут явно не причем [Ответ]
A-Maverick 14:11 26.02.2009

Сообщение от Виктoр:
Делаю по примеру и книги Димки Котерова

Выкиньте эту книгу.

Код:
<form enctype="multipart/form-data" action="_URL_" method="post">
 <input type="hidden" name="MAX_FILE_SIZE" value="30000" />
 Отправить этот файл: <input name="userfile" type="file" />
 <input type="submit" value="Send File" />
</form>
[PHP]<?php
// В PHP 4.1.0 и более ранних версиях следует использовать $HTTP_POST_FILES
// вместо $_FILES.

$uploadfile = '/uploads/' . basename($_FILES['userfile']['name']);

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) {
print "File is valid, and was successfully uploaded. ";
print "Here's some more debugging info:\n";
print_r($_FILES);
} else {
print "Possible file upload attack! Here's some debugging info:\n";
print "Possible file upload attack! Дополнительная отладочная информация:\n";
print_r($_FILES);
}
print "</pre>";

?> [/PHP] [Ответ]
Виктoр 18:19 26.02.2009
A-Maverick, не помогло

Сообщение от :
Possible file upload attack! Here's some debugging info:
Possible file upload attack! Дополнительная отладочная информация:
Array
(
[userfile] => Array
(
[name] => 007.JPG
[type] =>
[tmp_name] =>
[error] => 2
[size] => 0
)

)

[Ответ]
][irurg 20:20 26.02.2009

Сообщение от Виктoр:
Но! на виндовом апаче он у меня файлы загружает. На апаче, который я поднял под Линуксом(Debian) он файл почему-то принимать не хочет.

настройки одинаковые?
есть мнение что виноваты разрешения на папки, куда загружаете. [Ответ]
Виктoр 21:23 26.02.2009

Сообщение от ][irurg:
есть мнение что виноваты разрешения на папки, куда загружаете.

Это я тоже уже просмотрел. В папку console куда я хочу записать, разрешено писать всем и вся.
Конфиги тоже лопатил. Ничего инетерсного не нашел..Извините, я не спец в этом.
в архиве конфиги обоих


A-Maverick
под виндой код выдает тоже самое.
Изображения
[Ответ]
][irurg 08:45 27.02.2009

Сообщение от Виктoр:
В папку console куда я хочу записать, разрешено писать всем и вся.

а эта папка находится в www? имхо если код работает под виндой значит он верный.
а что говорят логи апача [Ответ]
Виктoр 07:49 28.02.2009
][irurg, молчат. там про загрзуку файлов ничего. лишь в логе эррор.лог ругается на отсутсвующий файл favicon.ico. как я понимаю это как-то его стандартный файл, т.к. в моем проекте он нигде не используется. [Ответ]
Yandex 09:42 28.02.2009
Виктoр, дурной вопрос - версии php/Apache на серваках совпадают? [Ответ]
Виктoр 18:24 28.02.2009
Yandex, действительно дурной. дико сомневаюсь что от версии что-то зависит.
Linux Debian 4.0 r3
PHP 5.2.0-8+etch13 (cli) (built: Oct 2 2008 08:26:18)
apache 2.2.3-4 +etch6
под виндой:
Apache 2.2.6
PHP 5.2.5

Немножко различаются. Ну и что теперь? Обновлять под линуксом апач? А типа в той версии такой простой код реалиовать нельзя?

Вопрос носит, наверно, чисто административный характер, а не программируемый. Тему можно закрыть или перенести в соотвествующий раздел(не знаю куда ) [Ответ]
][irurg 19:44 28.02.2009
Виктoр, попробуйте расположить папку куда закачиваете в директории www апача. в аналогичной ситуации однажды помогло, особенно если лениво ковырять настройки [Ответ]
Yandex 23:02 28.02.2009
Виктoр, ну мало ли - может там 4 и 5 версии были.
Кстати, почему бы не посмотреть, что сам php пишет, убрав подавление ошибок @?

Ну и конечно давно надо уже было пнуть php-истов на их форумах. [Ответ]
Виктoр 01:00 01.03.2009
][irurg, весь сайт со всеми папками расположен в www/apache2-default

Yandex, убрал подавление ошибок. ничего не изменилось.

Сообщение от Yandex:
Ну и конечно давно надо уже было пнуть php-истов на их форумах.

Дал первый пинок. 50 просмотров, ответа нет. жду-с... [Ответ]
Rаvel 18:29 01.03.2009
Неплохо было бы еще приложить php.ini, конкретно блок "File Uploads" [Ответ]
Виктoр 19:54 01.03.2009
Rаvel, это?

Сообщение от :
; Whether to allow HTTP file uploads.
file_uploads = On

; Temporary directory for HTTP uploaded files (will use system default if not
; specified).
upload_tmp_dir =/www/apache2-default/tmp

; Maximum allowed size for uploaded files.
upload_max_filesize = 100M

вроде норм все
Изображения
[Ответ]
Вверх