Не могу сделать upload на сервер:(

Shhh

Новичок
Не могу сделать upload на сервер:(

Обрабатываю принятый файл, как описано в мануале:

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $path )) {
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_r($_FILES);
}
print "</pre>";


===========
А получаю:
Possible file upload attack! Here's some debugging info:
Array
(
[userfile] => Array
(
[name] => discover-platinum-credit-card.gif
[type] => image/gif
[tmp_name] => d:\temp\php1454.tmp
[error] => 0
[size] => 1988
)

)

Вроде же все правильно?
 

Shhh

Новичок
Пробовал так:

$path = "d:\hosting\creditcoop\logocard\\"."$id.jpg";
$path = "../logocard/$id.jpg";

-~{}~ 14.11.05 19:53:

А на локалке все хорошо работает...
 

SiMM

Новичок
> $path = "d:\hosting\creditcoop\logocard\\"."$id.jpg";
Откуда на хостинге виндовые пути, если там наверняка *nix'ы?

> $path = "../logocard/$id.jpg";
Используй абсолютные пути.
PHP FAQ: Различие между абсолютными и относительными путями. В файловой системе и на сайте.
PS: предпочитаю задавать их относительно [m]dirname[/m](__FILE__).
 

Shhh

Новичок
У меня на сервере стоит винда.

-~{}~ 14.11.05 20:03:

System Windows NT WINHOST51 5.2 build 3790
Build Date Mar 30 2005 17:32:35
 

Shhh

Новичок
Ложу в корень сайта phpini.php и он выдает:

d:\hosting\creditcoop\phpinfo.php

значит те пути получается...

---------------

Пишу:
<?
ini_set('display_errors',1);
error_reporting(E_ALL);
?>

ни одного слова лишенего не появляется...
 

zarus

Хитрожопый макак
PHP:
// НЕВЕРНО! Работа с файлами ведется на уровне сервера, а не на уровне скрипта - и ему не известны относительные пути
$path = "../logocard/$id.jpg";
// Вот так будет "правильнее", хотя отцы безопасности меня убьют :)
$file_cat = str_replace('//','/',$_SERVER['DOCUMENT_ROOT'].'/').'logocard/'; 
// Путь получается относительно корня САЙТА. Если же папка для безопасности лежит ВНЕ корня САЙТА (уровнями выше), то используем real_path() - подсталяем столько /.. , на сколько уровней выше нам надо подняться
$file_cat = real_path($file_cat.'/../../').'/';
// Получаем конечный путь к файлу, который используем в скрипте перемещения.
$path = $file_cat.$id.'jpg';
 

Shhh

Новичок
Автор оригинала: zarus
PHP:
$path = "../logocard/$id.jpg";
$file_cat = str_replace('//','/',$_SERVER['DOCUMENT_ROOT'].'/').'logocard/'; 
$file_cat = real_path($file_cat.'/../../').'/';
$path = $file_cat.$id.'jpg';
Получается тот же путь что я и писал...
d:\hosting\creditcoop\logocard/21.jpg

(уже попробовал разные комбинации прямых/обратных слешей..)

А может тут быть проблема в том что это NT?
 

zarus

Хитрожопый макак
Вполне, примени на конечном каталоге (тут тупой парсер custom codes):
str_replace("\","\\",str_replace("/","\",$file_cat))


В общем, 2 варианта обращения к файлам:
1. sex like windows - rubbish girl
В мануале написано, что в Windows системах надо вместо одного бэкслэша ставить двойные, т.е. на выходе должен получиться:
d:\\hosting\\creditcoop\\logocard\\21.jpg
2. sex like unix - manual procedure
Если это не поможет, то замени все бекслэши на слэши (Юниксовый формат):
d:/hosting/creditcoop/logocard/21.jpg
3. Если первые два пункта не помогут - то я ламер :)
 

Shhh

Новичок
zarus, не пашет ни так ни так...

Тут вообще какая-то фигня... я оказывается не могу с файлами работать скриптом...

if ( file_exists($path)) unlink($path); не удаляет, хотя файл находит...

copy("d:\\hosting\\creditcoop\\logocard\\22.jpg","d:\\hosting\\creditcoop\\dir1\\22.jpg"); тоже не пашет...

-~{}~ 15.11.05 16:01:

fopen() не пашет... и чего бы это?
 

zarus

Хитрожопый макак
Настройки прав доступа? 666 или 777 надо. 777 не рекомендуется, так как смогут удалять любые пользователи. И вообще - это уже вопрос по настройке прав доступа к файлам на сервере.
 

Shhh

Новичок
Это виндовс, там нету 777:)

-~{}~ 15.11.05 17:02:

пошел делать новую тему...
 
Сверху