请教各位
我这里希望从一个后台php程序dae.php 传值给 本机上另一系统中的某页面b.php。其中dae.php是每隔一段时间轮询另一服务器并接收字符,将这些字符传递给b.php页面dae.php页面关键代码如下:
<?php
$bWaitFlag=false;
$pids=array();
for($j=0;$j<3;$j++)
{ $pids[$j]=pcntl_fork();//产生子进程
if (!$pids[$j])
{
error_reporting(E_ALL);
set_time_limit(0);
do{
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
{
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}
else
{
echo "OK.\n";
}
echo "试图连接 '$address' 端口 '$service_port'...<br>";
$result = socket_connect($socket, $address, $service_port);
if ($result < 0)
{
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}
else
{
echo "连接OK<br>";
}
$in="ok";
$out = '';
$out1='';
if(!socket_write($socket, $in, strlen($in)))
{
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}
else
{
echo "发送到服务器信息成功!<br>";
echo "发送的内容为:$in";
}
while($out = socket_read($socket, 8192))
{
echo "接收服务器信息成功"."</br>";
/////////////////////////////
希望在这里传递$out给b.php 页面
////
}
socket_close($socket);
sleep(30);
}while(true);
}
sleep(5);
}
if($bWaitFlag)
{
for($i=0;$i<mysql_num_rows($agentPort);$i++)
{
pcntl_waitpid($pid[$i],$status,WUNTRACED);
echo"wait $i->".time()."n";
}
}
?>
我这里希望从一个后台php程序dae.php 传值给 本机上另一系统中的某页面b.php。其中dae.php是每隔一段时间轮询另一服务器并接收字符,将这些字符传递给b.php页面dae.php页面关键代码如下:
<?php
$bWaitFlag=false;
$pids=array();
for($j=0;$j<3;$j++)
{ $pids[$j]=pcntl_fork();//产生子进程
if (!$pids[$j])
{
error_reporting(E_ALL);
set_time_limit(0);
do{
$socket=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
if ($socket < 0)
{
echo "socket_create() failed: reason: " . socket_strerror($socket) . "\n";
}
else
{
echo "OK.\n";
}
echo "试图连接 '$address' 端口 '$service_port'...<br>";
$result = socket_connect($socket, $address, $service_port);
if ($result < 0)
{
echo "socket_connect() failed.\nReason: ($result) " . socket_strerror($result) . "\n";
}
else
{
echo "连接OK<br>";
}
$in="ok";
$out = '';
$out1='';
if(!socket_write($socket, $in, strlen($in)))
{
echo "socket_write() failed: reason: " . socket_strerror($socket) . "\n";
}
else
{
echo "发送到服务器信息成功!<br>";
echo "发送的内容为:$in";
}
while($out = socket_read($socket, 8192))
{
echo "接收服务器信息成功"."</br>";
/////////////////////////////
希望在这里传递$out给b.php 页面
////
}
socket_close($socket);
sleep(30);
}while(true);
}
sleep(5);
}
if($bWaitFlag)
{
for($i=0;$i<mysql_num_rows($agentPort);$i++)
{
pcntl_waitpid($pid[$i],$status,WUNTRACED);
echo"wait $i->".time()."n";
}
}
?>
这样就可以了如果数据量大的,不考虑 get 方式。可以用模拟 post , socket 方式。
dae.php是在后台一直跑着 我不希望在这里用url的方式跳转传值 不知道你说的模拟post是怎么做的 请指教
dae.php是在后台一直跑着 我不希望在这里用url的方式跳转传值 不知道你说的模拟post是怎么做的 请指教
注意变量不要重名
这里是多线程轮询某几个端口,每个线程收到的消息都不同,现在是想在线程循环内 传递消息字符串给b.php 当然若在传递过程中能唯一标识消息更好(若不能,我打算将这一唯一标识符与消息 implode 串行化到某一字符串中,然后在b.php中在explode 出来 判断)
但现在问题是 不知道如何能把消息字符串传送到b.php中 session cookie都试过 不行 session会死 cookie会提示header 错误 重要的是这两种方式 传送到 b.php 中的值均为NULL
================
用include的方式的话,当前系统的网络帐号必须要有权限访问另一个系统的文件,且最好变量名那些不会冲突!
然后就和平常的include一样,在b.php中可以直接用$out。
但你b.php里的其他包含页面最好也改成include。用其他方式模拟请求:set_time_limit(0);
$parameter = "out={$out}";
$header .= "POST /b.php HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Type: text/html; charset=utf-8\r\n";//注意编码
$header .= "Content-Length: ".strlen($parameter)."\r\n\r\n";
$fp=fsockopen('服务器域名或IP','访问端口,如80',$errno,$errstr,15);//验证服务器是否可以连接if($fp){
fputs($fp,$header.$parameter);//只需要发送数据过去,不需要处理返回的数据,到这里就可以了,后面的可以不要了
$string="";
$isheader=true;
while($result=fgets($fp)){
$string.=$result;
if($result=="\r\n"&&$isheader){
$string="";
$isheader=false;
}
}
fclose($fp);
}
请问 dingsongtao 能拿具体例子说明下吗
include除了有权限外,应该是:
include("b.php的硬盘路径目录/b.php");