请教各位
我这里希望从一个后台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";
}
}
?>

解决方案 »

  1.   

    b.php 是什么地址??http://192.168.1.2/b.php?key=你要传的值(最好 base64)在 b.php$value=$_GET['key'];//base64?
    这样就可以了如果数据量大的,不考虑 get 方式。可以用模拟 post , socket 方式。
      

  2.   

    O(∩_∩)O~  yangball  你的头像我希望 陈晓旭最美的时候 
    dae.php是在后台一直跑着  我不希望在这里用url的方式跳转传值  不知道你说的模拟post是怎么做的 请指教
      

  3.   

    O(∩_∩)O~ yangball 你的头像我希望 陈晓旭最美的时候  
    dae.php是在后台一直跑着 我不希望在这里用url的方式跳转传值 不知道你说的模拟post是怎么做的 请指教
      

  4.   

    呵呵,忘了你不需要跳转的。那就最好用 socket 这个方式吧。
      

  5.   

    include 'b.php';
    注意变量不要重名
      

  6.   

    include ??然后呢?
    这里是多线程轮询某几个端口,每个线程收到的消息都不同,现在是想在线程循环内  传递消息字符串给b.php  当然若在传递过程中能唯一标识消息更好(若不能,我打算将这一唯一标识符与消息 implode 串行化到某一字符串中,然后在b.php中在explode 出来 判断)
    但现在问题是 不知道如何能把消息字符串传送到b.php中  session cookie都试过 不行 session会死  cookie会提示header 错误  重要的是这两种方式 传送到 b.php 中的值均为NULL  
      

  7.   

    用socket方式? dae.php这里已经是一个client端的轮询程序   b.php 是我一个管理系统的某个页面  怎么用呢 请指教 
      

  8.   

    本帖最后由 xuzuning 于 2010-08-12 08:59:34 编辑
      

  9.   

    本机上另一系统中的某页面b.php
    ================
    用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);
    }
      

  10.   

    你的意思是 我在dae.php中 假如include("b.php"); 然后在b.php中就能访问dae.php中的变量吗?不可以吧,用两个简单的页面测试了一下 不可以啊  另外就是第二种传值方式 同样会提示 undefined value out
    请问 dingsongtao  能拿具体例子说明下吗 
      

  11.   

    这里用include 应该是是在 b.php 中include("dae.php")才可以使用$out值吧  但是如果是这样的话 因为dae.php 一直在运行 这样的话 b.php 就一直处于打开状态  时间长了 就超时了 
      

  12.   

    用fsockopen post数据 怎么在b.php页面接收啊  用$_POST吗
      

  13.   

    $string就是接收到的数据。
    include除了有权限外,应该是:
    include("b.php的硬盘路径目录/b.php");
      

  14.   

    现在打算用php的curl 从dae.com 向b.php  post数据 可是不知道在b.php如何得到这些数据?请问有人知道吗 
      

  15.   

    没法使用以上这些方法啊  我的dae.php 是一个后台轮询程序  不管使用哪种方法 都会造成b.php页面卡  但是b.php 是管理系统  怎么能卡呢  该怎么传呢?莫非要写文件 读文件了 请各位支招哈 困扰我两天了 项目就在这儿卡住了