Как сделать upload не из броузера, а через fsockopen?

tche

Новичок
Как сделать upload не из броузера, а через fsockopen?

Вчера уже спрашивал, но потом сообщение исчезло.

Имеем стандартный скрипт для приема файлов из формы с <input type=file>. Необходимо сделать upload не из броузера, а из другого скрипта на другом сервере. Полагаю, что можно открыть сокет, и сделать fputs($fp, "POST script_name HTTP/1.1 \r\n\r\n)
потом по идее надо написать Content_type и Content_length,
и сам файл. Так вот можно ли это сделать и как закодировать файл?
Спасибо,
Дима
 

sokov

Guest
Пожалуйста не удаляйте это сообщение, мне тоже интересно
 

Demiurg

Guest
все очень просто .... главное составить правильный запрос . см rfc 2388.
 

sokov

Guest
А через fsockopen нема?
Что-то типо этого, только ещё чтоб файло гонял:

PHP:
function sendPostQuery($host,$path,$data,$cookieData=array()){

 /* sendPostQuery
	* ~~~~~~~~~~
	* Params:
	*   $host - Just the hostname.  No http:// or /path/to/file.html portions
	*   $path - The /path/to/file.html part
	*   $data - The array of variables to be passed using the POST method
	*
	* Example:
	*   sendPostQuery('www.google.com','/search',array("q"=>"php_imlib"));
	*/


	//---------------- Data ---------------------------
	
	while(list($name,$value)=each($data)){
		$tmpData[] = urlencode($name)."=".urlencode($value);
	} 
	$encodedData=implode("&",$tmpData); 

	//---------------- Compose a POST query------------
	
	$fp = fsockopen($host,80,$errno,$errstr,15);
	if(!$fp){echo "Error: ".$errstr; return;}
	fputs($fp, "POST $path HTTP/1.1\r\n");
	fputs($fp, "Host: $host\r\n");
	fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
	fputs($fp, "User-Agent: MSIE\r\n");
	if(!empty($cookieData)){
		fputs($fp, "Cookie: ".implode("; ",composeKeyValue($cookieData))."\r\n");
	}
	fputs($fp, "Content-length: " . strlen($encodedData) . "\r\n");
	fputs($fp, "Connection: close\r\n\r\n");
	fputs($fp, $encodedData);
	
	$output="";
	while (!feof($fp)){$output .= fgets($fp,128);}
	fclose($fp);
	return $output;
}
 

sokov

Guest
PHP:
//----------------------------- Array functions ------------------------------

function composeKeyValue($args,$excludeKeys=array()){
	
	$output=array();
	
	foreach($args as $key => $value){
		if(!in_array($key,$excludeKeys)){
			array_push($output,$key."=".$value);
		}
	}
	
	return $output;
}
 

Demiurg

Guest
тебе же дали готовое решение, что в нем не нравится ?
 

sokov

Guest
C курлой не работал. Посмотрю на досуге.

Спасибо по-любому.
 

avryabov

Guest
А обязвтельно через fsockopen?
Есть еще такая штука как curl. это типа wget только круче.
Может POST делать. А в php есть к ней спец-интерфейс.
Через сам curl можно файлы слать (через опцию -F), а вот можно-ли слать файлы через curl_* функции php - незнаю.
 

tche

Новичок
Большое спасибо

за дискуссию и приведенные примеры, я тоже разобрался

Ч.
 
Сверху