PHP. Обработчик загруженных файлов. Не работает ?

А это index.php

<html>
<head><title> WWWW </title></head> 
<body> 
<?php
<FORM  ENCTYPE ="multipart/form-data"
ACTION = "phpfile.php" method="post" > 
Select the file to download : 
<INPUT NAME="userfile" TYPE="file" >
<BR><BR>
<INPUT TYPE ="submit" VALUE="Download!" >
</FORM>
?>
</body> 
</html> 

Это phpfile.php , который обрабатывает загруженный файл :

 <html> 
 <head><title> FILE HANDLING </title></head> 
 <body>
 <H1> 
 The display of the uploaded file
 </H1>
 <?php
 $handle = fopen ( $_FILES ['userfiles'] ['tmp_name']);
 while ( !feof ($handle) )
 {
	 $text = fgets ($handle) ;
	 echo $text , "<BR>" ;
 }
 fclose ( $handle) ;
 ?>
 </body> 
 </html> 

Появляется ошибка ( более того цикл while , бесконечно выполняет код , что вызывает зависание браузера и его поломку ) :

Notice: Undefined index: userfiles in C:\www\test\phpfile.php on line 9
Warning: fopen() expects at least 2 parameters, 1 given in C:\www\test\phpfile.php on line 9
Warning: feof() expects parameter 1 to be resource, boolean given in C:\www\test\phpfile.php on line 10
Warning: fgets() expects parameter 1 to be resource, boolean given in C:\www\test\phpfile.php on line 12

Key Words for FKN + antitotal forum (CS VSU):

DenDroiD's picture

Ваша главная ошибка в том, что имя поля для загрузки 'userfile', а обращение идет к 'userfiles'. Также в fopen надо передавать модификатор доступа: например 'r' для чтения. Вот смените эту строку

$handle = fopen($_FILES ['userfile']['tmp_name'], 'r');

И все заработает.
P.S: на кнопке логичнее писать "upload", а не download.

fgh's picture

Спасибо ) получилось . Скажите пожалуйста , модификатор доступа 'r' это обязательно ? Или он нужен только для атрибута "только для чтения" , можно ли его чем то заменить или убрать ?

DenDroiD's picture

Да, модификатор передавать обязательно. Есть и другие модификаторы доступа. Подробнее про функцию fopen и различные модификаторы доступа (чтение, запись, добавление и т.д) прочтите тут http://www.php.su/fopen

vedro-compota's picture

вопрос некорректен - учитесь использовать документацию -
идём сюда (php.net)
- используем форму search в правом верхнем углу и читаем
документацию по функции (язык можно переключить на русский).
Если в функции параметр необзятален то его записывают
в квадратных скобках - если же он не в квадратных - то обязателен, в вашем случае:

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] )

как видим - первые два параметра обязательны.

если будут вопросы по документации или по поиску в ней - спрашивайте.)

_____________
матфак вгу и остальная классика =)

fgh's picture

Понял. Спасибо.

vedro-compota's picture

Предупреждения и сообщения об ошибках тоже подсвечивайте как код (Warning) и удалите лишние строки. Записи должны выглядеть аккуратно)

_____________
матфак вгу и остальная классика =)