function PostToHost($url, $data) {
$url = parse_url($url);
if (!$url) return "couldn\'t parse url";
if (!isset($url[\'port\'])) { $url[\'port\'] = ""; }
if (!isset($url[\'query\'])) { $url[\'query\'] = ""; }
$encoded = "";
while (list($k,$v) = each($data)) {
$encoded .= ($encoded ? "&" : "");
$encoded .= rawurlencode($k)."=".rawurlencode($v);
$port = $url[\'port\'] ? $url[\'port\'] : 80;
$fp = fsockopen($url[\'host\'], $port, $errno, $errstr);
if (!$fp) return "Failed to open socket to $url[host] $port ERROR: $errno - $errstr";
fputs($fp, sprintf("POST %s%s%s HTTP/1.0\\n", $url[\'path\'], $url[\'query\'] ? "?" : "", $url[\'query\']));
fputs($fp, "Host: $url[host]\\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\\n");
fputs($fp, "Content-length: " . strlen($encoded) . "\\n");
fputs($fp, "Connection: close\\n\\n");
fputs($fp, "$encoded\\n");
$line = fgets($fp,1024);
if (!eregi("^HTTP/1\\.. 200", $line)) return;
$results = ""; $inheader = 1;
while(!feof($fp)) {
$line = fgets($fp,1024);
if ($inheader && ($line == "\\n" || $line == "\\r\\n")) {
$inheader = 0;
elseif (!$inheader) {
$results .= $line;
fclose($fp);
return $results;
}/* end function PostToHost */
?>相关阅读:
jQuery 添加/移除CSS类实现代码
设置Proxy Server和SQL Server实现互联网上数据库的
asp.net 半角全角转化工具
在JavaScript中,为什么要尽可能使用局部变量?
ASP.NET入门教程:DataList控件
SQL Server 2008新特性面面观
Linux安全防护十大招数
Oracle DDL,DML,DCL,TCL 入门概念
Z-Blog 文件复制插件
将后台数据从Berkeley的文件DB转到MySQL
使用jQuery实现dropdownlist的联动效果(sharepoint 2007)
Vista中Office2007字体不能正常显示
帝国ecms教程:一些常用的技巧大全
EJB3.0之实体Bean的继承
php socket方式提交的post详解/*** POST报文到主机*/function PostToHost($url, $data) {$url = parse_url($url);if (!$url) return "couldn\'t parse url";if (!isset($url[\'port\'])) { $url[\'port\'] = ""; }if (!isset($ur...
<? /* **
POST
报文
到
主机
*/ function
Post
ToHost($url, $data) { $url = parse_url($url); if (!$url) return “couldn\’t parse url”; if (!isset($url[\’port\’])) { $url[\’port\’] = “”; } if (!isset($url[\’query\’])) { $url[\’query\’] = “”; } $encoded = “”; while (list($k,$v) = each($data)) { $encoded
首先了解下
socket
通讯传输数据的特点:数据在网络传输时使用的都是字节流或字符流,
Socket
也不例外,所以我们
发送
数据的时候需要转换为字节
发送
,读取的时候也是以字节为单位读取。
那么问题就在于
socket
通讯时,接收方并不知道此次数据有多长,因此无法精确地创建一个缓冲区(字节数组)用来接收,在不定长通讯中,通常使用的
方式
时每次默认读取8*1024长度的字节,若输入流中仍有数据,则再次读取,一直到输入流没有数据为止。但是如果
发送
数据过大时,
发送
方会对数据进行分包
发送
,这种情况下或导致接收方判断错误,误以为
在
PHP
+ FLASH 游戏的编程中,经常碰到需要
PHP
使用
Socket
和Flash 的
XML
socket
进行交互。
PHP
的在处理
socket
客户端
发送
过来的数据时,会有以下四种情况:
1、正常数据,如:
2、密集的多条数据(是通过一次TCP过程),如:
3、超长的数据分多次
发送
,如:
$
xml
_data = '<
xml
>...</
xml
>';//
发送
的
xml
$url = 'http://localhost/get
XML
.
php
';//接收
XML
地址
$header = "Content-type: text/
xml
";//定义content-type为
xml
一直以来很少看到有多少人使用
php
的
socket
模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实
php
的
socket
模块可以做很多事情,包括做ftplist,http
post
提交
,smtp
提交
,组包并进行特殊
报文
的交互(如smpp协议),whois查询。这些都是比较常见的查询。
特别是
php
的
socket
扩展库可以做的事情简直不会比c差
我在Windows命令行输入命令:C:\wamp\bin\
php
\
php
5.2.6\
php
.exe get
Xml
.
php
以执行
php
文件。
出现错误:Fatal error: Call to undefined function
socket
_create() in C:\wamp\www\get
Xml
.
php
on line 13
网上搜了挺多论坛上的Q&A贴子,答案基本上是:
1....