передача файла через POST
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
передача файла через POST - 2010-01-25 05:54:07.603333
|
|
|
_miki_
Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
|
Привет! У меня есть скрипт на php <?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);
?> он скрипту 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 <?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."<br>");
print("Имя файла на компьютере пользователя: ".$myfile_name."<br>");
print("MIME-тип файла: ".$myfile_type."<br>");
print("Размер файла: ".$myfile_size."<br><br>");
$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
?> теперь вопрос : если пользоваться формой то файл на сервере создается, а если первым скриптом то нет. скажите что неправильно
|
|
|
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 ты как то криво формировал =) <?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);
?>
|
|
|
RE: передача файла через POST - 2010-01-25 14:08:16.513333
|
|
|
_miki_
Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
|
всмисле ты запустил первый скрипт и на сервере создался файлик???
|
|
|
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;…
|
|
|
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 что делать???
|
|
|
RE: передача файла через POST - 2010-01-25 16:13:01.090000
|
|
|
Agent Smith
Сообщений: 976
Оценки: 0
Присоединился: 2007-04-10 21:56:49.593333
|
Че же тут не ясного? Написано, что к файлу C:\test.jpg нету доступа. Проверьте правильность написания пути по серверу, проверьте наличие самого файла, проверьте права на файл, установленные на свервере, проверьте права на папку ,в которой находится файл.
|
|
|
RE: передача файла через POST - 2010-01-25 17:04:04.910000
|
|
|
_miki_
Сообщений: 277
Оценки: 0
Присоединился: 2009-01-21 21:45:45.676666
|
мне нужно чтобы файл "C: \ test.jpg" загрузился от юзера на сервер
|
|
|
RE: передача файла через POST - 2010-01-26 10:49:46.390000
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
омг. товарисч явно не понимает принцип работы скриптов) если ты таким образом пытаешся скачать чтото с удалённого кампа то забудь)))) пхп работает только с сервером
|
|
|
RE: передача файла через POST - 2010-01-26 12:45:31.070000
|
|
|
Re.Spawn
Сообщений: 16
Оценки: 0
Присоединился: 2009-06-07 23:59:23.790000
|
Лол =))) Ребятки,вы посты ваще не читаете…. Скопипастил бы свой скрипт,который я во втором сообщении кинул,и было бы те счастье =) А так я вам могу сказать,что экранировать спец символы нада +) C:\\test.txt - попробуте так… =) Или в одинарные кавычки заключай. На сколько я помню,PHP строку сразу как лексему принимает в одинарных кавычках.
|
|
|
RE: передача файла через POST - 2010-01-26 13:04:40.643333
|
|
|
codeismy.name
Сообщений: 618
Оценки: 0
Присоединился: 2009-07-19 00:30:13.200000
|
не всегда :) это зависит от настроек сервера.
|
|
|
|
|