Здравствуйте. Для выполнения задачи мне необходимо открыть переданный на сервер файл. Мне это сделать не удается. В попытках упростить задачу до минимума и тем самым отсеять возможные ошибки, не имеющие отношения к первостепенной задаче, я дошел до примера из мануала PHP. Вот его код: index.html HTML: <form enctype="multipart/form-data" action="http://localhost/upload.php" method="POST"> <!-- MAX_FILE_SIZE must precede the file input field --> <input type="hidden" name="MAX_FILE_SIZE" value="30000" /> <!-- Name of input element determines name in $_FILES array --> Send this file: <input name="userfile" type="file" /> <input type="submit" value="Send File" /> </form> upload.php PHP: <?php $uploaddir = '/uploads/'; $uploadfile = $uploaddir . basename($_FILES['userfile']['name']); echo '<pre>'; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { echo "File is valid, and was successfully uploaded.\n"; } else { echo "Possible file upload attack!\n"; } echo 'Here is some more debugging info:'; print_r($_FILES); print "</pre>"; ?> В результате я имею: Код (Text): Possible file upload attack! Here is some more debugging info:Array ( [userfile] => Array ( [name] => podr.jpg [type] => image/pjpeg [tmp_name] => C:\DOCUME~1\Mmm\LOCALS~1\Temp\php\upload\php9C.tmp [error] => 0 [size] => 6490 ) ) То есть функция move_uploaded_file() не отработала корректно. Ну и в самом деле, файла в директории /uploads я не вижу. Но я также не вижу и файла C:\DOCUME~1\Mmm\LOCALS~1\Temp\php\upload\php9C.tmp У меня есть подозрение, что это связано с настройками php. До этого я пробовал открыть по-другому: PHP: <?php . . $f=fopen($_FILES['file']['tmp_name'],"rb") or die("Не могу открыть файл"); $pic=fread($f,filesize($f)) or die("Не могу прочитать файл"); . . ?> и в результате я получал: Код (Text): Не могу прочитать файл Вот еще лог апача: line 9 в приведенном листинге является 6 строкой. Подскажите, в чем проблема?
исправил PHP: $uploaddir = '/uploads/'; на PHP: $uploaddir = 'C:\\Program Files\\Apache Group\\Apache2\\htdocs\\uploads\\'; И файл перенесся. Что-то я недопонимаю... Почему пример из мануала для работы требует исправлений? Почему временный файл не появляется на диске во временной директории?
Trank Код (Text): $uploaddir = '/uploads/'; адрес со слеша начинается а значит будет считаться что он от корня того диска на котором установлен сервер то бишь глядя на второй код можно сказать что в твоем случае /uploads/ == C:/uploads/ заметь не обязательно городить экранированные обратные слеши PHP '/' понимает так же как '\\'
хорошим тоном считается использование стандартной константы DIRECTORY_SEPARATOR вместо / и \\ Trank PHP: <? echo getcwd(); echo '<br />'; echo dirname(__FILE__); посмотрите результаты
PHP: $uploaddir = '/uploads/'; исправь на PHP: $uploaddir = './uploads/'; выводи $uploadfile и смотри что это за путь получился.