Forum Webscript.Ru
Программирование => PHP => Тема начата: WG от 05 Ноября 2004, 16:49:20
-
Необходимо создать директорию и загрузить туда файл.
Директория создается, но возхникает ошибка при загрузке файла!
Хотя по отдельности все работает нормально? В чем может быть причина?
$root=$HTTP_SERVER_VARS[\'DOCUMENT_ROOT\'];
$pathdir=$root.\'Pic/Head\';
$pathdir=trim($pathdir);
$oldmask=umask(0);
@mkdir("$pathdir", 0777) or die("Ошибка при создании директории");
umask($oldmask);
if(!mkdir("$pathdir", 0777))
{
echo"Ошибка!";
exit;
}
$userfile=$HTTP_POST_FILES[\'small\'][\'tmp_name\'];
$userfile_name=$HTTP_POST_FILES[\'small\'][\'name\'];
$userfile_size=$HTTP_POST_FILES[\'small\'][\'size\'];
$userfile_error=$HTTP_POST_FILES[\'small\'][\'error\'];
if ($userfile_name!="")
{
if ($userfile_error > 0)
{
echo "Проблема:";
switch($userfile_error)
{
case 1: echo \' размер файла больше допустимого значения на сервере\'; break;
case 2: echo \' размер файла больше установленного\'; break;
case 3: echo \' загружена только часть файла\'; break;
case 4: echo \' файл не загружен\'; break;
}
exit;
}
$upfile=\'../Pic/Head/\'.\'line.jpeg\';
if (is_uploaded_file($userfile))
{
if (!move_uploaded_file($userfile, $upfile))
{
echo "Проблема: невозможно переслать файл в каталог назначения";
exit;
}
}
else
{
echo "Проблема: возможна атака через загрузку файла. Файл: ".$userfile_name;
exit;
}
echo "Файл успешно загружен
";
}
else
{
echo "Вы не загрузили файл";
}
-
но возхникает ошибка при загрузке файла
Текст покажешь?
-
Проблема: невозможно переслать файл в каталог назначения
-
Скорее всего, прав не хватает.
error_reporting(E_ALL);
ini_set(\'display_errors\', 1);
поставь временно вверху скрипта,
тогда должно быть видно warning.
-
выдает ошибку:
Warning: move_uploaded_file(): SAFE MODE Restriction in effect. The script whose uid is 1809 is not allowed to access /public_html/Pic/Head owned by uid 3 in /public_html/upl/upload.php on line 27
-
Вообще возникает вопрос может ли php-скрипт работать с созданными им директориями????
-
Нашел один из вариантов решения проблемы: вставка perl-скрипта, заместо создания директории на php.
В первом листинге заменил
$oldmask=umask(0);
@mkdir("$pathdir", 0777) or die("Ошибка при создании директории");
umask($oldmask);
на
virtual("../cgi-bin/createdir.pl?dir=$pathdir");
Код createdir.pl
#!/usr/bin/perl
print "Content-type: text/html\\n\\n";
@pairs = split(/&/, $ENV{\'QUERY_STRING\'});
foreach $pair (@pairs){
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$FORM{$name} = $value;
}
$newdir = $FORM{\'dir\'};
umask 0;
mkdir $newdir, 0777;
1;
-
У меня та же проблема, но на хостинге не дают Перл. Если делаю move_uploaded_file в директорию, созданную руками по ФТП (с выставленными на нее правами 0777), работает как часы.
А если добавляю фотки к новому, скажем, дизелю, скрипт успешно создает папку с правами 0777, а вот move_uploaded_file он в нее сделать никак не может (хотя и перемещаю по абсолютным путям).
Пытался сервак заставить залить темповый файл на себя по второму разу через ФТП — получаю Call to undefined function ftp_connect (не работают ftp_ функции, значит).
Помогите, чем можете...
-
а после создания директория не блокируется ли php до завершения скрипта? а?
может какой нить closedir попробовать?
Потому, что я пробовал создать директорию, и положить в нее файл (правда не залить а создать нулевой, ну или с любым текстом - все работало нормально)
-
umask(0);
mkdir($uploaddir,0777);
$dir=opendir($uploaddir);
closedir($dir);
move_uploaded_file(...);
--тот же Warning и файл все равно не заливается