freeBSD下运行phpmsnclass产生msnbot.php: not found的解决办法
2010/04/12 16:57 ArthurXF
PHPMSNCLASS是一个使用PHP编写的跟MSN通讯的一个工具,很好用,这个工具可以建立MSNBOT,也就是MSN机器人。但是这个程序是针对Linux下的。所以有些设置跟freebsd不对,会造成无法正常运行。
网上很多的资料都没有给出正确的答案,这里我ArthurXF就来献丑了。
首先,需要下载:
phpmsnclass V1.9
我的系统环境是FreeBSD,PHP5.2.12,Apache/2.2.14。这个安装过程可以按照readme来做,
做之前先检查如下php Extensions 是否已经安装:
curl
pcre
pcntl
mhash(支援MSNP15)
mcrypt (支援MSNP15)
bcmath (支援MSNP15)
Apache 要装CLI 的模块,这个服务需要用到端口1863和443,别被防火墙挡了。
都安装好了,在执行下列步骤:
1. 建立下列目录:
mkdir /var/spool/msnbot
mkdir /var/spool/msnbot/log
mkdir /var/spool/msnbot/spool
2. 改变spool目录属性:
chmod 777 /var/spool/msnbot/spool
chmod o+t /var/spool/msnbot/spool
3.把msnbot.php, config.php and msn.class.php复制到 /var/spool/msnbot/目录下, 并且执行下面的命令:
chmod +x /var/spool/msnbot/msnbot.php
4. 编辑config.php文件,修改成你自己需要的设置,如发送人帐号,密码等
5.把msnbot.sh放到启动目录,Linux是/etc/init.d/下,Freebsd是/usr/local/etc/rc.d/下这样系统启动后就会自动执行msnbot.sh了.
这里要特别注意的。msnbot.sh要能执行,必须执行chown +x msnbot.sh。
6. 你可以按照需要修改msnbot.php.
7. 如果你需要发送信息给某人,就在/var/spool/msnbot/spool下建立一个文件名像'*.msn'的文件,文件格式第一行是TO:email1,email,第二行就是信息内容了。
以上是官方提供的正式安装步骤。
我按照这个步骤安装好了。执行./msnbot.sh start命令。
马上报错Starting MSN bot:msnbot/usr/local/etc/rc.d/msnbot.sh: /var/spool/msnbot/msnbot.php: not found
可是msnbot.php确实在/var/spool/msnbot/是存在的。查了N多资料,没解决问题。
直接执行php -Cq /var/spool/msnbot/msnbot.php没任何报错信息。
后来打开msnbot.php看到第一行是写的#! /usr/bin/php,问题就在这里了。
freebsd的php是在/usr/local/bin/php,把这个文件修改了。问题解决。msnbot启动正常。
用msnsendmsg.php测试吧,先修改这个文件的第一行,#! /usr/local/bin/php
然后执行php msdsendmsg.php 接收msn帐号 内容
执行成功后。在/var/spool/msnbot/spool/下就会多出一个.msn文件。里面保存的就是你刚才执行的信息。
等会msnbot执行到了,就会把信息发送出去了。
如果信息没收到,请到/var/spool/msnbot/log下,如果程序启动了,会有3个.log文件的。没有的话,则是没说明msnbot.php服务程序没启动。请按照上面的步骤检查。
程序发送msn信息步骤。
编写一个PHP程序,把接收到的信息,保存到/var/spool/msnbot/spool/目录下,保存成一个*.msn文件,切记一定要把那个*.msn文件的属性改成666,即程序中一定要执行chmod($strFilename, 0666);语句。这样就可以正常发送MSN数据了。
本文是ArthurXF倾情奉献,转载请注明出处,谢谢。
网上很多的资料都没有给出正确的答案,这里我ArthurXF就来献丑了。
首先,需要下载:
phpmsnclass V1.9
我的系统环境是FreeBSD,PHP5.2.12,Apache/2.2.14。这个安装过程可以按照readme来做,
做之前先检查如下php Extensions 是否已经安装:
curl
pcre
pcntl
mhash(支援MSNP15)
mcrypt (支援MSNP15)
bcmath (支援MSNP15)
Apache 要装CLI 的模块,这个服务需要用到端口1863和443,别被防火墙挡了。
都安装好了,在执行下列步骤:
1. 建立下列目录:
mkdir /var/spool/msnbot
mkdir /var/spool/msnbot/log
mkdir /var/spool/msnbot/spool
2. 改变spool目录属性:
chmod 777 /var/spool/msnbot/spool
chmod o+t /var/spool/msnbot/spool
3.把msnbot.php, config.php and msn.class.php复制到 /var/spool/msnbot/目录下, 并且执行下面的命令:
chmod +x /var/spool/msnbot/msnbot.php
4. 编辑config.php文件,修改成你自己需要的设置,如发送人帐号,密码等
5.把msnbot.sh放到启动目录,Linux是/etc/init.d/下,Freebsd是/usr/local/etc/rc.d/下这样系统启动后就会自动执行msnbot.sh了.
这里要特别注意的。msnbot.sh要能执行,必须执行chown +x msnbot.sh。
6. 你可以按照需要修改msnbot.php.
7. 如果你需要发送信息给某人,就在/var/spool/msnbot/spool下建立一个文件名像'*.msn'的文件,文件格式第一行是TO:email1,email,第二行就是信息内容了。
以上是官方提供的正式安装步骤。
我按照这个步骤安装好了。执行./msnbot.sh start命令。
马上报错Starting MSN bot:msnbot/usr/local/etc/rc.d/msnbot.sh: /var/spool/msnbot/msnbot.php: not found
可是msnbot.php确实在/var/spool/msnbot/是存在的。查了N多资料,没解决问题。
直接执行php -Cq /var/spool/msnbot/msnbot.php没任何报错信息。
后来打开msnbot.php看到第一行是写的#! /usr/bin/php,问题就在这里了。
freebsd的php是在/usr/local/bin/php,把这个文件修改了。问题解决。msnbot启动正常。
用msnsendmsg.php测试吧,先修改这个文件的第一行,#! /usr/local/bin/php
然后执行php msdsendmsg.php 接收msn帐号 内容
执行成功后。在/var/spool/msnbot/spool/下就会多出一个.msn文件。里面保存的就是你刚才执行的信息。
等会msnbot执行到了,就会把信息发送出去了。
如果信息没收到,请到/var/spool/msnbot/log下,如果程序启动了,会有3个.log文件的。没有的话,则是没说明msnbot.php服务程序没启动。请按照上面的步骤检查。
程序发送msn信息步骤。
编写一个PHP程序,把接收到的信息,保存到/var/spool/msnbot/spool/目录下,保存成一个*.msn文件,切记一定要把那个*.msn文件的属性改成666,即程序中一定要执行chmod($strFilename, 0666);语句。这样就可以正常发送MSN数据了。
本文是ArthurXF倾情奉献,转载请注明出处,谢谢。
今天公司同事反应网站所有的产品详细页面无法打开,任何一个产品信息都报错
The page you are looking for is temporarily unavailable.
Please try again late.
问过了其他的技术,没人修改过网站程序,那么怎么会出错呢?首页和分类,列表页又不出错。
首先怀疑是缓存问题,缓存目录里没有goods的缓存,同时看到了很多Sql_cache是空的,那么先到includes/cls_mysql.php把里面的$max_cache_time = 3600改成$max_cache_time = 0这样sql就不缓存了。
可是这样还是没有解决问题,然后跟踪程序的执行通过了对goods.php,lib_goods.php,cls_template.php,commonfunc.php的分析,最后找到了commonfunc.php中的write2file函数中有个fputs($fp,$msg);语句,只要执行这个语句就会报错,这个语句是标准的PHP函数,没任何错误,后来把$fileName打印出来一看,原来是logs/debug.log。
过去一看,这个文件大小有2G,估计是文件系统已经无法在操作这个文件了。所以就会频频报错。删除这个文件,一切恢复正常!
我ArthurXF倾情奉献,希望能对大家有所帮助。
The page you are looking for is temporarily unavailable.
Please try again late.
问过了其他的技术,没人修改过网站程序,那么怎么会出错呢?首页和分类,列表页又不出错。
首先怀疑是缓存问题,缓存目录里没有goods的缓存,同时看到了很多Sql_cache是空的,那么先到includes/cls_mysql.php把里面的$max_cache_time = 3600改成$max_cache_time = 0这样sql就不缓存了。
可是这样还是没有解决问题,然后跟踪程序的执行通过了对goods.php,lib_goods.php,cls_template.php,commonfunc.php的分析,最后找到了commonfunc.php中的write2file函数中有个fputs($fp,$msg);语句,只要执行这个语句就会报错,这个语句是标准的PHP函数,没任何错误,后来把$fileName打印出来一看,原来是logs/debug.log。
过去一看,这个文件大小有2G,估计是文件系统已经无法在操作这个文件了。所以就会频频报错。删除这个文件,一切恢复正常!
我ArthurXF倾情奉献,希望能对大家有所帮助。
smarty的date_format中不能有中文的解决方案
2010/02/04 12:51 ArthurXF
{$smarty.now|date_format:"%Y年%m月%d日"} 这样写就成了"2010年%m月%d日"+一些乱码如果给汉字后加上空格就正常了,但是输出也有了空格。
为了解决这个问题,我去读了smarty的插件代码modifier.date_format.php:
发现里面strftime这个PHP函数对于中文支持不好。
所以我修改了modifier.date_format.php函数,一劳永逸啊。大家可以直接复制替换原有内容即可。
而且我这个函数还是支持繁简中文的哦。呵呵
为了解决这个问题,我去读了smarty的插件代码modifier.date_format.php:
发现里面strftime这个PHP函数对于中文支持不好。
所以我修改了modifier.date_format.php函数,一劳永逸啊。大家可以直接复制替换原有内容即可。
而且我这个函数还是支持繁简中文的哦。呵呵
function smarty_modifier_date_format($string, $format = '%b %e, %Y', $default_date = '')
{
if (substr(PHP_OS,0,3) == 'WIN') {
$_win_from = array ('%e', '%T', '%D');
$_win_to = array ('%#d', '%H:%M:%S', '%m/%d/%y');
$format = str_replace($_win_from, $_win_to, $format);
}
$arrTemp = array('年','月','日','时','分','秒','時');
foreach($arrTemp as $v){
if(strpos($format,$v)){
$strFormat = str_replace('%','',$format);
}
}
if($string != '') {
if(!empty($strFormat)) return date($strFormat, smarty_make_timestamp($string));
else return strftime($format, smarty_make_timestamp($string));
} elseif (isset($default_date) && $default_date != '') {
if(!empty($strFormat)) return date($strFormat, smarty_make_timestamp($default_date));
else return strftime($format, smarty_make_timestamp($default_date));
} else {
return;
}
}
{
if (substr(PHP_OS,0,3) == 'WIN') {
$_win_from = array ('%e', '%T', '%D');
$_win_to = array ('%#d', '%H:%M:%S', '%m/%d/%y');
$format = str_replace($_win_from, $_win_to, $format);
}
$arrTemp = array('年','月','日','时','分','秒','時');
foreach($arrTemp as $v){
if(strpos($format,$v)){
$strFormat = str_replace('%','',$format);
}
}
if($string != '') {
if(!empty($strFormat)) return date($strFormat, smarty_make_timestamp($string));
else return strftime($format, smarty_make_timestamp($string));
} elseif (isset($default_date) && $default_date != '') {
if(!empty($strFormat)) return date($strFormat, smarty_make_timestamp($default_date));
else return strftime($format, smarty_make_timestamp($default_date));
} else {
return;
}
}
下载软件的专用地址生成方法
2010/01/20 10:18 ArthurXF
经常看到一些下载站做了一些专用软件下载地址,例如:迅雷下载地址,快车下载地址。那么这些地址怎么得来的呢?
现在就链接的编码原理及转换详细说明一下,明白以后就可以用迅雷下载快车、旋风专用地址的软件啦。
首先要明白Base64编码是怎么一回事,不懂的先去百度一下再回来。
Base64编码是一种加密算法,Email的原始信息就是由Base64编码构成的。
而这些专用链接都是通过Base64编码加工转换而成的。
1、迅雷专用链接编码
在原地址前面加”AA”,后面加”ZZ”(不包括引号),地址变为
AAhttp://www.biweb.cn/biweb.rarZZ
此地址base64编码为
QUFodHRwOi8vd3d3LmJpd2ViLmNuL2Jpd2ViLnJhclpa
迅雷专链即在上地址前加thunder://,即
Thunder://QUFodHRwOi8vd3d3LmJpd2ViLmNuL2Jpd2ViLnJhclpa
2、快车专用链接编码
在原地址前后都加上”[FLASHGET]“(不包括引号),地址变为
[FLASHGET]http://www.biweb.cn/biweb.rar[FLASHGET]
此地址base64编码为
W0ZMQVNIR0VUXWh0dHA6Ly93d3cuYml3ZWIuY24vYml3ZWIucmFyW0ZMQVNIR0VUXQ== 快车专链即在上地址前加flashget://,注意后面还要加上”&符号”,符号怎么得出不清楚,在最后后面加的是好好爱的个人信息,至今未有人报告转换错误,即
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9pbS5iYWlkdS5jb20vaW5zdGFsbC9CYWlkdUhpLmV4ZVtGTEFTSEdFVF0=&arthurxf
3、旋风专用链接编码
旋风相对就简单多了,将原地址直接base64编码为
aHR0cDovL3d3dy5iaXdlYi5jbi9iaXdlYi5yYXI=
旋风专链即在上地址前加qqdl://,即
qqdl://aHR0cDovL3d3dy5iaXdlYi5jbi9iaXdlYi5yYXI=
这样你的软件下载的时候就可以提供专用软件下载地址了。还可以给自己的原始地址保护起来。呵呵。本文是由Arthurxf倾情奉献!
现在就链接的编码原理及转换详细说明一下,明白以后就可以用迅雷下载快车、旋风专用地址的软件啦。
首先要明白Base64编码是怎么一回事,不懂的先去百度一下再回来。
Base64编码是一种加密算法,Email的原始信息就是由Base64编码构成的。
而这些专用链接都是通过Base64编码加工转换而成的。
1、迅雷专用链接编码
在原地址前面加”AA”,后面加”ZZ”(不包括引号),地址变为
AAhttp://www.biweb.cn/biweb.rarZZ
此地址base64编码为
QUFodHRwOi8vd3d3LmJpd2ViLmNuL2Jpd2ViLnJhclpa
迅雷专链即在上地址前加thunder://,即
Thunder://QUFodHRwOi8vd3d3LmJpd2ViLmNuL2Jpd2ViLnJhclpa
2、快车专用链接编码
在原地址前后都加上”[FLASHGET]“(不包括引号),地址变为
[FLASHGET]http://www.biweb.cn/biweb.rar[FLASHGET]
此地址base64编码为
W0ZMQVNIR0VUXWh0dHA6Ly93d3cuYml3ZWIuY24vYml3ZWIucmFyW0ZMQVNIR0VUXQ== 快车专链即在上地址前加flashget://,注意后面还要加上”&符号”,符号怎么得出不清楚,在最后后面加的是好好爱的个人信息,至今未有人报告转换错误,即
Flashget://W0ZMQVNIR0VUXWh0dHA6Ly9pbS5iYWlkdS5jb20vaW5zdGFsbC9CYWlkdUhpLmV4ZVtGTEFTSEdFVF0=&arthurxf
3、旋风专用链接编码
旋风相对就简单多了,将原地址直接base64编码为
aHR0cDovL3d3dy5iaXdlYi5jbi9iaXdlYi5yYXI=
旋风专链即在上地址前加qqdl://,即
qqdl://aHR0cDovL3d3dy5iaXdlYi5jbi9iaXdlYi5yYXI=
这样你的软件下载的时候就可以提供专用软件下载地址了。还可以给自己的原始地址保护起来。呵呵。本文是由Arthurxf倾情奉献!
PHP强制浏览器不缓存的方法
2009/12/24 17:33 ArthurXF
一般我们要查看网上的一个网页,那么当您第一次访问这个网页的时候,系统首先要将这个网页下载到您的本地计算机的一个临时文件夹中进行缓存,当在一定的时间内,您第二次、第三次来访问这个网页的时候,浏览器就直接从您的本地计算机的临时文件夹中读取这个文件显示,这样做的好处就是避免每次都要重新下载而占用大量的时间和网络资源,不得不说页面的缓存加快了网页的显示,当然也有它的坏处,例如当服务器上的网页己经更新,而本地显示的还是没有更新的网页,这样就不能及时的显示更新后的内容,在某些情况下,我们需要禁止浏览器缓存,以使我们每次看到的页面都是最新的页面(例如后台操作、大型网站的时时新闻页面),这时我们就要禁用浏览器缓存,下面分别说明了在四种不同的页面环境下来禁止网页缓存:
一、对于静态页:
可以利用标记符的另一种用法来实现,其用法为:
特别说明:有很多人问到,这样设置了没有用,网页仍有缓存,那是因为您没有设置页面过期时间的原因,您必须同时指定当前页面的过期时间,例如:
这儿的meta标签用来定义页面过期时间为:2006年8月23日 23:40:27
需要特别注意的是content的值必须是一个UTC格式的标准时间(有关UTC格式的时间,请参见本站javascript教程)或者GMT时间(由于GMT时间己过时,所以建议用UTC标准格式),如果您要让网页立即过期,您可以设置一个过期时间远小于现在的时间,例如:
Mon,1 Jan 2001 0:0:0 UTC
二、对于ASP页面:
可利用以下语句下实现:
<%
Response.Buffer=true
Response.CacheControl="no-cache" '禁止代理服务器缓存本页面
Response.Expires=-1000 '让页面立即过期(这儿最好设置一个绝对值较大的负数)
%>
三、对于JSP页面:
<%
if (request.getProtocol().compareTo("HTTP/1.0")==0)
response.setHeader("Pragma","no-cache");
if (request.getProtocol().compareTo("HTTP/1.1")==0)
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>
四、对于PHP页面:
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
?>
说明:对于动态页面,缓存的代码必须放在任何HTML标签输出之前,否则将会出错。%>%>?php>
一、对于静态页:
可以利用标记符的另一种用法来实现,其用法为:
特别说明:有很多人问到,这样设置了没有用,网页仍有缓存,那是因为您没有设置页面过期时间的原因,您必须同时指定当前页面的过期时间,例如:
这儿的meta标签用来定义页面过期时间为:2006年8月23日 23:40:27
需要特别注意的是content的值必须是一个UTC格式的标准时间(有关UTC格式的时间,请参见本站javascript教程)或者GMT时间(由于GMT时间己过时,所以建议用UTC标准格式),如果您要让网页立即过期,您可以设置一个过期时间远小于现在的时间,例如:
Mon,1 Jan 2001 0:0:0 UTC
二、对于ASP页面:
可利用以下语句下实现:
<%
Response.Buffer=true
Response.CacheControl="no-cache" '禁止代理服务器缓存本页面
Response.Expires=-1000 '让页面立即过期(这儿最好设置一个绝对值较大的负数)
%>
三、对于JSP页面:
<%
if (request.getProtocol().compareTo("HTTP/1.0")==0)
response.setHeader("Pragma","no-cache");
if (request.getProtocol().compareTo("HTTP/1.1")==0)
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
%>
四、对于PHP页面:
header ("Cache-Control: no-cache, must-revalidate");
header ("Pragma: no-cache");
?>
说明:对于动态页面,缓存的代码必须放在任何HTML标签输出之前,否则将会出错。%>%>?php>