| |
|
|
| | Меня интересует, какие заголовки нужно отправить, чтобы отправить файл.
Тоесть представьте, на удаленном сервере есть форма для отправки файлов, и мне нужно через пшп скрипт отправить файл, который лежит на моем сервере. Думую понятно объяснил :). | |
| |
|
|
| |
|
|
| |
для: JIEXA
(07.05.2006 в 12:10)
| | | Примерное описание можно найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=1324, но конкретного программного решения нет... | |
| |
|
|
| |
|
|
| |
для: cheops
(07.05.2006 в 12:48)
| | | Вообщем вот что получилось примерно:
<?
$host = $url['host'];
$port = 80;
$path = $url['path']."?".$url['query'];
$file_name = $_FILES['userfile']['name']; // the file
$tmp_name = $_FILES['userfile']['tmp_name']; // the file
$content_type = $_FILES['userfile']['type']; // the file mime type
$value = "";
srand((double)microtime()*1000000);
$boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
// Build the header
$header = "POST $path HTTP/1.0\r\n";
$header .= "Host: $host\r\n";
$header .= "Content-type: multipart/form-data, boundary=$boundary\r\n";
// and attach the file
$data .= "--$boundary\r\n";
$content_file = join("", file($tmp_name));
$data .="Content-Disposition: form-data; name=\"filecontent\"; filename=\"$file_name\"\r\n";
$data .= "Content-Type: $content_type\r\n\r\n";
$data .= "".$content_file."\r\n";
$data .="--$boundary--\r\n";
$header .= "Content-length: " . strlen($data) . "\r\n\r\n";
// Open the connection
$fp = fsockopen($host, 80);
// then just
fputs($fp, $header.$data);
$line = "";
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
?>
|
Это я пример на php.net чуток отредактировал. Так вот проблема, если файл много весит, то получается что PHP начинает жрать много памяти, к примеру чтобы отправить файл 40Мб - пшп уже получается забивает память на 40Мб. Вопрос: как можно отправить файл не сразу по 40Мб а как бы пакетами к примеру по 5 Мб. | |
| |
|
|
| |
|
|
| |
для: JIEXA
(07.05.2006 в 13:53)
| | | - | |
| |
|
|
| |
|
|
| |
для: JIEXA
(08.05.2006 в 00:17)
| | | думаю никак, можно конечно sleep заюзать + fseek и какую функцию для получения текущего места | |
| |
|
|
| |
|
|
| |
для: JIEXA
(07.05.2006 в 13:53)
| | | А 40Мб где хотите резать на куски на клиенте или на сервере? | |
| |
|
|
| |
|
|
| |
для: cheops
(08.05.2006 в 00:49)
| | | На сервере. Я просто делаю автоматический загрузчик файлов на несколько бесплатных файл-сервисов, типа rapidshare.de, filefactory.com и т.д. Очень удобно заливать через одну форму сразу на несколько хостингов :) | |
| |
|
|
| |
|
|
| |
для: JIEXA
(08.05.2006 в 02:40)
| | | Скрипт, который разбивает файл на части и затем склеивает его обратно можно найти в теме по ссылке http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=827. | |
| |
|
|
| |
|
|
| |
для: cheops
(08.05.2006 в 09:39)
| | | Я думаю разбить - не проблема.
Меня больше интересует, как его отправить частями можно. | |
| |
|
|
| |
|
|
| |
для: JIEXA
(08.05.2006 в 12:05)
| | | сделал!! может кому понадобится - прикрепил в атаче | |
| |
|
|
| |
|
|
| |
для: JIEXA
(08.05.2006 в 15:07)
| | | Вообщем мне понадобилось ещё сделать отправку дополнительных полей вместе с файлом.. Но никак не получается:
<?
function sendfile($host, $port, $path, $filename, $name, $field, $fields=array())
{
$fdata = "name=".urlencode("jiexa")."&pass=".urlencode("mypass")."\r\n\r\n";
srand((double)microtime()*1000000);
$boundary = "---------------------".substr(md5(rand(0,32000)),0,10);
$clength = "--$boundary\r\n";
$clength.= "Content-Disposition: form-data; name=\"$field\"; filename=\"$name\"\r\n";
$clength.= "Content-Type: ".mime_content_type($filename)."\r\n\r\n";
$clength.= "\r\n--$boundary--\r\n";
$header = "POST $path HTTP/1.0\r\n";
$header .= "Host: $host\r\n";
$header .= "Referer: $host\r\n";
$header .= "Content-type: multipart/form-data, boundary=$boundary\r\n";
$header .= "Content-length: ".intval(filesize($filename)+strlen($clength)+strlen($fdata))."\r\n\r\n";
$header .= "--$boundary\r\n";
$header .= "Content-Disposition: form-data; name=\"$field\"; filename=\"$name\"\r\n";
$header .= "Content-Type: ".mime_content_type($filename)."\r\n\r\n";
$fp = fsockopen($host, $port);
fputs($fp, $header);
fputs($fp, $fdata);
$fp2 = fopen($filename, "r");
while (!feof($fp2))
{
fputs($fp, fgets($fp2, 1024*10));
}
fclose($fp2);
fputs($fp, "\r\n--$boundary--\r\n");
$line = "";
while (!feof($fp))
{
$line .= fgets($fp, 1024);
}
fclose($fp);
return $line;
}
?>
|
Файл отправляется, а данные из переменной $fdata не отправляются. В чем ошибка? | |
| |
|
|
| |
 2.2 Кб |
|
| |
для: JIEXA
(09.05.2006 в 14:44)
| | | Мне тут друг помогал, но тоже ничего не вышло. Теперь ни файл ни данные не шлются.
Прикрепляю то, что получилось в аттач, пожалуйста помогите привести в рабочие состояние скрипт, очень надо.
Функция вызывается так:
<?
print sendFile("sitename.ru", 80, "/read.php", "./probe.txt", "probe.txt",
"filecontent", array("mirror" => "on"));
?>
|
| |
| |
|
|
| |
|
|
| |
для: JIEXA
(10.05.2006 в 00:11)
| | | - | |
| |
|
|
| |
|
|
| |
для: JIEXA
(10.05.2006 в 00:11)
| | | вопрос все ещё актуален | |
| |
|
|