Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

передача файла через POST

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Веб-программинг] >> передача файла через POST
Имя
Сообщение << Старые топики   Новые топики >>
передача файла через POST - 2010-01-25 05:54:07.603333   
_miki_

Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
Привет!
У меня есть скрипт на php

&lt;?php $socket = fsockopen('test1.ua', 80, $errno, $errstr, 30); if(!$socket)die("$errstr($errno)"); //разделитель $boundary = md5(uniqid(time())); /*собираем часть с файлом: сначала разделитель\r\n со следующей строки заголовки\r\n потом пустая строка\r\n после чего сам файл\r\n */ $file = "--$boundary\r\n"; $file.= "Content-Disposition: form-data; name=\"myfile\"; filename=\"summary.log\"\r\n"; $file.= "Content-Type: text/plain\r\n\r\n"; $file.= file_get_contents("C:\test.txt");// это файл у юзера на компе $file.= "\r\n"; //пишем в сокет метод, URI и протокол $headers = "POST /get.php HTTP/1.1\r\n"; //а также имя хоста $headers .= "Host: test1.ru\r\n"; //размер передаваемых данных передаем в заголовке //Content-length $headers .= "Content-length:".strlen($file)."\r\n"; $headers .= "Content-Type: multipart/form-data; boundary=$boundary\r\n"; $headers .= "Connection: Close\r\n\r\n"; //передаем файл $headers .= "$file"; //в конце разделитель $headers .= "--$boundary--\r\n"; //и пустая строка $headers .= "\r\n"; fwrite($socket, $headers); //теперь читаем и выводим ответ $answer = ''; while(!feof($socket)){ $answer= fgets($socket, 4096); echo $answer; } //закрываем сокет fclose($socket); ?&gt;
он скрипту get.php отправляет файл test.txt
(аналог простой форме которая отправляет файл на сервер)
<html>
<body>
<FORM ENCTYPE="multipart/form-data" ACTION="get.php" METHOD=POST><br>
Выберете файл: <INPUT NAME="myfile" TYPE="file"><br>
<INPUT TYPE="submit" VALUE="Загрузить">
</FORM>
</body>
</html>

вот код скрипта get.php

&lt;?php // Загрузка файлов на сервер // Если register_globals=Off // Если upload файла if(isset($_FILES["myfile"])) { $myfile = $_FILES["myfile"]["tmp_name"]; $myfile_name = $_FILES["myfile"]["name"]; $myfile_size = $_FILES["myfile"]["size"]; $myfile_type = $_FILES["myfile"]["type"]; $error_flag = $_FILES["myfile"]["error"]; // Если ошибок не было if($error_flag == 0) { print("Имя файла на нашем сервере (во время запроса): ".$myfile."&lt;br&gt;"); print("Имя файла на компьютере пользователя: ".$myfile_name."&lt;br&gt;"); print("MIME-тип файла: ".$myfile_type."&lt;br&gt;"); print("Размер файла: ".$myfile_size."&lt;br&gt;&lt;br&gt;"); $catalog = "../Our_Site/".$myfile_name; copy($myfile, $catalog); // Получаем содержимое файла $fp = fopen($myfile,"r"); $content = fread($fp, filesize($myfile)); fclose($fp); // Вывод содержимого файла //print($content); } // end of if 2 } // end of if 1 ?&gt;
теперь вопрос :
если пользоваться формой то файл на сервере создается,
а если первым скриптом то нет.
скажите что неправильно
Post #: 1
RE: передача файла через POST - 2010-01-25 09:32:56.216666   
Re.Spawn

Сообщений: 16
Оценки: 0
Присоединился: 2009-06-07 23:59:23.790000
Как я понимаю,темтишь на денвере. В первой строчке скрипта открываешь сокет на test1.ua,
а заголовок передаешь на test1.ru =) Банальная очепатка.
У меня лично все твое хозяйство заработало,стоило сокет на test1.ru переправить .
Ну и переменную file ты как то криво формировал =)

&lt;?php $socket = fsockopen('test1.ru', 80, $errno, $errstr, 30); if(!$socket)die("$errstr($errno)"); //разделитель $boundary = md5(uniqid(time())); /*собираем часть с файлом: сначала разделитель\r\n со следующей строки заголовки\r\n потом пустая строка\r\n после чего сам файл\r\n */ $file = "--$boundary\r\n"; $file.= "Content-Disposition: form-data; name=\"myfile\"; filename=\"test.txt\"\r\n"; $file.= "Content-Type: text/plain\r\n\r\n"; $file.= file_get_contents("C:\\test.txt");// это файл у юзера на компе $file.= "\r\n"; $file .= "--$boundary--\r\n"; //и пустая строка $file .= "\r\n"; //пишем в сокет метод, URI и протокол $headers = "POST /get.php HTTP/1.0\r\n"; //а также имя хоста $headers .= "Host: test1.ru\r\n"; //размер передаваемых данных передаем в заголовке //Content-length $headers .= "Content-length: ".strlen($file)."\r\n"; $headers .= "Content-Type: multipart/form-data; boundary=$boundary\r\n"; $headers .= "Connection: Close\r\n\r\n"; //передаем файл $headers .= "$file"; fwrite($socket, $headers); //теперь читаем и выводим ответ $answer = ''; while(!feof($socket)){ $answer= fgets($socket, 4096); echo $answer; } //закрываем сокет fclose($socket); ?&gt;
Post #: 2
RE: передача файла через POST - 2010-01-25 14:08:16.513333   
_miki_

Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
всмисле ты запустил первый скрипт и на сервере создался файлик???
Post #: 3
RE: передача файла через POST - 2010-01-25 16:04:16.886666   
Agent Smith

Сообщений: 976
Оценки: 0
Присоединился: 2007-04-10 21:56:49.593333
Скорее всего в своем сокет запросе используете не мультипарт передачу, а обычную $file.= "Content-Disposition: form-data;…
Может стоит попробовать $file.= "Content-Disposition: multipart/form-data;…
Post #: 4
RE: передача файла через POST - 2010-01-25 16:07:03.050000   
_miki_

Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
все скрипт работает
теперь я залил его на хостинг и ошибка
Warning: file_get_contents (C:\test.jpg) [function.file-get-contents]: failed to open stream: No such file or directory
что делать???
Post #: 5
RE: передача файла через POST - 2010-01-25 16:13:01.090000   
Agent Smith

Сообщений: 976
Оценки: 0
Присоединился: 2007-04-10 21:56:49.593333
Че же тут не ясного? Написано, что к файлу C:\test.jpg нету доступа. Проверьте правильность написания пути по серверу, проверьте наличие самого файла, проверьте права на файл, установленные на свервере, проверьте права на папку ,в которой находится файл.
Post #: 6
RE: передача файла через POST - 2010-01-25 17:04:04.910000   
_miki_

Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
мне нужно чтобы файл "C: \ test.jpg" загрузился от юзера на сервер
Post #: 7
RE: передача файла через POST - 2010-01-26 10:49:46.390000   
codeismy.name

Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
омг. товарисч явно не понимает принцип работы скриптов)
если ты таким образом пытаешся скачать чтото с удалённого кампа то забудь)))) пхп работает только с сервером
Post #: 8
RE: передача файла через POST - 2010-01-26 12:45:31.070000   
Re.Spawn

Сообщений: 16
Оценки: 0
Присоединился: 2009-06-07 23:59:23.790000
Лол =))) Ребятки,вы посты ваще не читаете…. Скопипастил бы свой скрипт,который я во втором сообщении кинул,и было бы те счастье =) А так я вам могу сказать,что экранировать спец символы нада +) C:\\test.txt - попробуте так… =) Или в одинарные кавычки заключай. На сколько я помню,PHP строку сразу как лексему принимает в одинарных кавычках.
Post #: 9
RE: передача файла через POST - 2010-01-26 13:04:40.643333   
codeismy.name

Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
не всегда :)
это зависит от настроек сервера.
Post #: 10
Страниц:  [1]
Все форумы >> [Веб-программинг] >> передача файла через POST







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.