Старый 25.02.2009, 22:38   #1   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
php как загрузить файл на сервер?

Делаю по примеру и книги Димки Котерова:
вот форма:
Код:
<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 почему-то оказывается пустой. не хотит принимать ни какие файлы, даже те, названия которых состоит из одних цифр.

Последний раз редактировалось Виктoр; 25.02.2009 в 22:52.
  Ответить с цитированием
Старый 25.02.2009, 23:11   #2   
Кэп Улитка
 
Аватар для Yandex
 
Сообщений: 8,067
Регистрация: 04.05.2005
Возраст: 45

Yandex вне форума Не в сети
Предположу
> <input type=File_name=File><br>
регистр в *nix обычно имеет значение. Ну еще бы проверил настройки папок на предмет "неправильных" кавычек и слешей в пути.
P.S. php почти не знаю.
  Ответить с цитированием
Старый 26.02.2009, 01:04   #3   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
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>
Это тут явно не причем
  Ответить с цитированием
Старый 26.02.2009, 14:11   #4   
иногородний
 
Аватар для A-Maverick
 
Сообщений: 231
Регистрация: 26.10.2008
Возраст: 41

A-Maverick вне форума Не в сети
Цитата:
Сообщение от Викт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]
  Ответить с цитированием
Старый 26.02.2009, 18:19   #5   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
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
)

)
  Ответить с цитированием
Старый 26.02.2009, 20:20   #6   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 44
Записей в дневнике: 1

][irurg вне форума Не в сети
Цитата:
Сообщение от Виктoр Посмотреть сообщение
Но! на виндовом апаче он у меня файлы загружает. На апаче, который я поднял под Линуксом(Debian) он файл почему-то принимать не хочет.
настройки одинаковые?
есть мнение что виноваты разрешения на папки, куда загружаете.
  Ответить с цитированием
Старый 26.02.2009, 21:23   #7   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
Цитата:
Сообщение от ][irurg Посмотреть сообщение
есть мнение что виноваты разрешения на папки, куда загружаете.
Это я тоже уже просмотрел. В папку console куда я хочу записать, разрешено писать всем и вся.
Конфиги тоже лопатил. Ничего инетерсного не нашел..Извините, я не спец в этом.
в архиве конфиги обоих


A-Maverick
под виндой код выдает тоже самое.
Вложения
Тип файла: rar Apache2.2.rar (14.7 Кб, 6 просмотров)
  Ответить с цитированием
Старый 27.02.2009, 08:45   #8   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 44
Записей в дневнике: 1

][irurg вне форума Не в сети
Цитата:
Сообщение от Виктoр Посмотреть сообщение
В папку console куда я хочу записать, разрешено писать всем и вся.
а эта папка находится в www? имхо если код работает под виндой значит он верный.
а что говорят логи апача
  Ответить с цитированием
Старый 28.02.2009, 07:49   #9   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
][irurg, молчат. там про загрзуку файлов ничего. лишь в логе эррор.лог ругается на отсутсвующий файл favicon.ico. как я понимаю это как-то его стандартный файл, т.к. в моем проекте он нигде не используется.
  Ответить с цитированием
Старый 28.02.2009, 09:42   #10   
Кэп Улитка
 
Аватар для Yandex
 
Сообщений: 8,067
Регистрация: 04.05.2005
Возраст: 45

Yandex вне форума Не в сети
Виктoр, дурной вопрос - версии php/Apache на серваках совпадают?
  Ответить с цитированием
Старый 28.02.2009, 18:24   #11   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
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

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

Вопрос носит, наверно, чисто административный характер, а не программируемый. Тему можно закрыть или перенести в соотвествующий раздел(не знаю куда )
  Ответить с цитированием
Старый 28.02.2009, 19:44   #12   
Форумец
 
Аватар для ][irurg
 
Сообщений: 2,009
Регистрация: 14.07.2006
Возраст: 44
Записей в дневнике: 1

][irurg вне форума Не в сети
Виктoр, попробуйте расположить папку куда закачиваете в директории www апача. в аналогичной ситуации однажды помогло, особенно если лениво ковырять настройки
  Ответить с цитированием
Старый 28.02.2009, 23:02   #13   
Кэп Улитка
 
Аватар для Yandex
 
Сообщений: 8,067
Регистрация: 04.05.2005
Возраст: 45

Yandex вне форума Не в сети
Виктoр, ну мало ли - может там 4 и 5 версии были.
Кстати, почему бы не посмотреть, что сам php пишет, убрав подавление ошибок @?

Ну и конечно давно надо уже было пнуть php-истов на их форумах.
  Ответить с цитированием
Старый 01.03.2009, 01:00   #14   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
][irurg, весь сайт со всеми папками расположен в www/apache2-default

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

Цитата:
Сообщение от Yandex Посмотреть сообщение
Ну и конечно давно надо уже было пнуть php-истов на их форумах.
Дал первый пинок. 50 просмотров, ответа нет. жду-с...
  Ответить с цитированием
Старый 01.03.2009, 18:29   #15   
come in :)
 
Аватар для Rаvel
 
Сообщений: 241
Регистрация: 05.09.2007
Возраст: 34

Rаvel вне форума Не в сети
Неплохо было бы еще приложить php.ini, конкретно блок "File Uploads"
  Ответить с цитированием
Старый 01.03.2009, 19:54   #16   
Форумец
 
Сообщений: 60
Регистрация: 09.08.2008

Виктoр вне форума Не в сети
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
вроде норм все
Вложения
Тип файла: zip php.zip (41.6 Кб, 2 просмотров)
  Ответить с цитированием
Поиск в теме: 



Быстрый переход:

  Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Support by DrIQ & Netwind