如题:
程序做好,server.php 部署在个人电脑当服务器(win7+apache2.2+mysql+php5.2),客户端是一个单片机,每隔3秒发送给我一个信号包,我接收后保存到mysql一个表中。发现每次我打开server.php后,能正常接收信号,并且保存到数据库中,但是过了大概30秒,发现数据不保存了,一查,连端口也被关掉了,不知道是什么原因?cpu消耗查看了没问题,难道是因为内存?还是因为防火墙?向各位大神们求救!!
server.php代码如下:<?php
include 'conn.php';
//error_reporting( E_ALL );
set_time_limit( 0 );
ob_implicit_flush();
$socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
if ( $socket === false ) {
echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n";
}
$ok = socket_bind( $socket, '0.0.0.0', 11211 );
if ( $ok === false ) {
echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
}
while ( true ) { $from = "";
$port = 0;
socket_recvfrom( $socket, $buf,1024, 0, $from, $port );
echo $buf;
//插入数据库
if (strlen($buf)>10){
date_default_timezone_set('PRC');
$lasttime=date("Y-m-d H:i:s");
$sql = "insert into users(lastname,lasttime) values('$buf','$lasttime')";
$result = @mysql_query($sql);
echo "-----------------------";
}
usleep( 1000 );
}
?>
程序做好,server.php 部署在个人电脑当服务器(win7+apache2.2+mysql+php5.2),客户端是一个单片机,每隔3秒发送给我一个信号包,我接收后保存到mysql一个表中。发现每次我打开server.php后,能正常接收信号,并且保存到数据库中,但是过了大概30秒,发现数据不保存了,一查,连端口也被关掉了,不知道是什么原因?cpu消耗查看了没问题,难道是因为内存?还是因为防火墙?向各位大神们求救!!
server.php代码如下:<?php
include 'conn.php';
//error_reporting( E_ALL );
set_time_limit( 0 );
ob_implicit_flush();
$socket = socket_create( AF_INET, SOCK_DGRAM, SOL_UDP );
if ( $socket === false ) {
echo "socket_create() failed:reason:" . socket_strerror( socket_last_error() ) . "\n";
}
$ok = socket_bind( $socket, '0.0.0.0', 11211 );
if ( $ok === false ) {
echo "socket_bind() failed:reason:" . socket_strerror( socket_last_error( $socket ) );
}
while ( true ) { $from = "";
$port = 0;
socket_recvfrom( $socket, $buf,1024, 0, $from, $port );
echo $buf;
//插入数据库
if (strlen($buf)>10){
date_default_timezone_set('PRC');
$lasttime=date("Y-m-d H:i:s");
$sql = "insert into users(lastname,lasttime) values('$buf','$lasttime')";
$result = @mysql_query($sql);
echo "-----------------------";
}
usleep( 1000 );
}
?>
解决方案 »
- 关于利用json实现java与php间的传值机制问题!
- [支付宝接口]支付成功后,写入数据库操作在哪里好?
- 好害怕啊,大家进来帮忙吧。
- php 在linux下能不能调用word?用什么技术?
- 有用php做web service的过来人吗
- 基础问题
- 请解释:$this->h_acl->set_userdata($user);$this->m_TB_AGENT->change_gr_to_num),h_acl是个什么东西
- utf8转gb,怎么转?
- 表单中一个disabled的文本框,能不能在表单提交的时候获得它的值
- fsockopen 关于web通信协议问题!
- php里怎么能将html代码转成word xml格式的代码
- php 二维码转URL的问题
粗略扫了一眼代码 你这代码应该是从网上搜索到的吧 应该没什么问题(我没有调试,不敢保证)所以我猜会不会是客户端有并发数据产生? 发送到了11211端口
现在这个代码是不支持并发的所以我担心是这里出了问题对了,补充下
1. socket_recvfrom函数是阻塞的 后面的usleep应该没啥必要
2.既然这个程序调用了set_time_limit(0), 代表这个页面一旦被请求将一直被执行到结束 不再受默认30s的时间限制
所以你在浏览器中是否关闭这个网页已经没所谓了 这个程序一旦被启动 将一直执行 直到httpd停止希望这些能给你排查问题带来点方向
30秒后自动关闭的原因是你的程序运行在 web 方式下
在 CLI(命令行)方式下就没有这个限制了
追问:能否把cli模式如何操作说详细点?我应该怎么改呢?在服务器上做一个.bat文件执行?还是干脆做一个c#本地客户端执行?要考虑多线程么?我确实是半桶水,请教更详细的解答,万分感谢!期待中……
php_win.exe code.php用 C# 当然更好啦也可以用 WinBinder 2010 写成 桌面程序 或 Tray 程序
追问:php_win.exe code.php 是什么意思? 是在.bat里面的语句么?你指的code.php是否就是我上面的那段代码文件server.php?可以直接用么?求详解。
CLI 方式方式下 php.ini 的搜索路径是:
程序文件所在目录
php-win.exe 所在目录也可以用 php.exe、php_cgi.exe、php_cli.exe 但他们多半会出现命令窗口,有碍观瞻
我写了一个bat文件,就是单独以上一句,执行没有反应啊? 又改成
D:\PHPnow\php-5.2.14-Win32\php-win.exe D:\PHPnow\htdocs\toolsudp\server.php 也没反应啊?路径的大小写我都查了。什么原因呢? 检查我的 php服务器发现 起作用的不是 php.ini 而似乎是 php-apache2handler.ini 不知是否有影响?
就算是要相同的配置,你也是复制 php-apache2handler.ini 到 D:\PHPnow\php-5.2.14-Win32\ 并改名为 php.ini
1、输入
php-win.exe D:\PHPnow\htdocs\toolsudp\server.php 提示我 php-win.exe不是内部或外部命令;2、转到D目录输入
D:\PHPnow\php-5.2.14-Win32\php-win.exe D:\PHPnow\htdocs\toolsudp\server.php 没有任何反应3、输入
D:\PHPnow\php-5.2.14-Win32\php.exe D:\PHPnow\htdocs\toolsudp\server.php (改用php.exe)提示我:PHP Warning:
PHP Startup:Unable to load dynamic library './php_gd2.dll' -找不到指定的模块。In unknow line 0
PHP Warning:PHP Startup:Unable to load dynamic library './php_mysqli.dll' -找不到指定的模块。In unknow line 0求解!!!
追问:
D:\PHPnow\php-5.2.14-Win32\php-win.exe 这是我的php文件夹中的目录,我尝试了还是没反应?