By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
440,199 Members | 1,458 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 440,199 IT Pros & Developers. It's quick & easy.

Sending a binary file (and other stuffs) with fsockopen

P: n/a
Hi!

I'm havin a problem about sending a binary file with fsockopen. My
problem is solved when i do:

-------------------->8------CODE-----------------------------
<form action="200.120...../file.php" method="POST"
enctype="multipart/form-data">
<form name="file" />
<form name="ip_01" />
<form name="ip_02" />
< (...) submit button (...)>
</form>
-------------------->8------CODE-----------------------------

where file must be a binary file (in this case is a zip file) and
ip_0X is a number.. Some ip from my internal network...

But i was trying a script to do this automaticaly, like:
-------------------->8------CODE-----------------------------
<?

$host='200.120.....';
$port=80;
$path='/file.php';

// Ip Values :)
$ip_01 = "192.168...."
$ip_02 = someRandonIp();

// File to POST
$file = "file.zip"

$file_array[0] = $file; // the file
$content_type = "application/x-zip-compressed"; // the file mime type

srand((double)microtime()*1000000);
$boundary = "---------------------------".substr(md5(rand(0,32000)),0,10);

$data = "--$boundary";

for($i=0;$i<count($file_array);$i++){
$content_file = join("", file($file_array[$i]));

$data.="
Content-Disposition: form-data; name=\"$file_array[$i]\";
filename=\"$file_array[$i]\"
Content-Type: $content_type
$content_file
--$boundary";
}

$data.="--\r\n\r\n";

// ==== I think my error is here!!! ==== //
$path = $path . "?ip_01=$ip_01&ip_02=$ip_02";

$msg = "GET $path HTTP/1.0\r\n";
$msg .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
$msg .= "Content-Length: ". strlen($data) ."\r\n\r\n";

echo $msg . "\n";

// open the connection
$f = fsockopen($host, $port);
fputs($f, $msg.$data);
$result="";
while (!feof($f)) $result .= fread($f,32000);
fclose($f);

echo $result . "\n";
?>
-------------------->8------CODE-----------------------------
file.php is not receiving ip_01 and ip_2 .. So i thin the problem is
in:

-------------------->8------CODE-----------------------------
$path = $path . "?ip_01=$ip_01&ip_02=$ip_02";
-------------------->8------CODE-----------------------------

Any Ideia?
Thanks!
Jul 17 '05 #1
Share this Question
Share on Google+
3 Replies


P: n/a
Ot?vio wrote:
// ==== I think my error is here!!! ==== //
$path = $path . "?ip_01=$ip_01&ip_02=$ip_02";

$msg = "GET $path HTTP/1.0\r\n";
$msg .= "Content-Type: multipart/form-data; boundary=$boundary\r\n";
$msg .= "Content-Length: ". strlen($data) ."\r\n\r\n";

echo $msg . "\n";


Yes, it probably is, because it looks like the only thing you want to do is
to call the script with some parameters and get the response.

For this, you don't need to send the Content-Type/Length headers; the
following will suffice:

$msg = "GET $path HTTP/1.0\r\n";
$msg .= "Host: $host\r\n\r\n";
JW

Jul 17 '05 #2

P: n/a
Janwillem Borleffs wrote:
Yes, it probably is, because it looks like the only thing you want to
do is to call the script with some parameters and get the response.

For this, you don't need to send the Content-Type/Length headers; the
following will suffice:

$msg = "GET $path HTTP/1.0\r\n";
$msg .= "Host: $host\r\n\r\n";


Hmmm.. had another look at your message and realized that this reply isn't
correct. You must think of the following rules if you want to send both
parameters and binary data to a script pver HTTP:

1. You can only use POST to send binary data (as in file uploads)
2. Additional parameters should be included in seperate boundaries when they
are part of a multipart message

I have posted an example script, which might be helpful:

http://www.jwscripts.com/playground/postdata.phps
JW

Jul 17 '05 #3

P: n/a
Hello,

on 02/11/2005 08:47 PM Ot?vio said the following:
Hi!

I'm havin a problem about sending a binary file with fsockopen. My
problem is solved when i do:


You should submit it with the POST method and the other variables should
be also submitted in the request body.

Anyway, you may want to try this HTTP client class that can submit a
POST request with uploaded files and other form values correctly:

http://www.phpclasses.org/httpclient
--

Regards,
Manuel Lemos

PHP Classes - Free ready to use OOP components written in PHP
http://www.phpclasses.org/

PHP Reviews - Reviews of PHP books and other products
http://www.phpclasses.org/reviews/

Metastorage - Data object relational mapping layer generator
http://www.meta-language.net/metastorage.html
Jul 17 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.