Loading...

如何保持持久

类归于: PHP, 互联网事, 网站技术 — 江东 @ 2010-03-31 16:06:50 才(9)条评论

此文提到的“持久”是指web 的session会话持久。

有的时候,为了方便,我们需要在用户一直保持登录状态,即使用户没有做任何动作也不要因为超时而将让将用户的登录状态终止,除非用户主动关闭浏览器。

当然,实现这个方法有最简单的方式,那就是改变服务器的配置,将会话超时的时间设置更久,但是有些时候,我们只是做一个小的应用,或许我们的程序仅仅是放置在共享的虚拟主机上,这个时候我们可能无法更改服务器的设置,那么就将这个任务交给web程序去做吧。

其实实现的方法很简单,那就是用js定时去获取服务器端数据,赶在超时前去告诉服务器:“我还在做动作呢”。

实现方式很简单

首先,在服务器端建一个文件,随便取名,比如keepalive.php. 可以有内容,比如<?php echo “当前时间是:”.date(’Y-m-d H:i:s’);?>,也可以干脆为空。

然后在在公共的文件(比如 inc.footer.php)中写一段js,代码如下:

function keepAlive(){
var url="keepalive.php";
$.get(url,function(d){});
setTimeout ( "loadAdminStatus()", 120000 );
}
keepAlive();

当然,前提是你要引入 jquery 库。

如此这般之后,一旦打开网页,系统将会每120秒去通知一次服务器,只要服务器的超时时间在120秒外(若少于120秒,请修改120000为合适的值 单位是毫秒),登录状态便会永不超时。

解决最近刚刚出现的图片红叉问题

类归于: PHP, 网站技术 — 江东 @ 2009-07-16 23:13:49 才(45)条评论

由于本人的相册都很和谐,所以还是得想办法让用户能看见。

原理很简单,首先在国外的主机上加上一段代码,让国外的主机根据GET传递过去的url参数相片读取下来,缓存在自己服务器上,由于某个东西异常厉害,所以传递参数的时候还得要将某些单词给替代,才能传递,否则国外的主机连带撞死;

然后打开模板中的footer文件,添加一段js代码,此js代码的作用就是遍历该页所有图片,然后将其替代成http://xxx.com/readimg.php?这里是图片的地址,这样图片就可以正常显示了。js代码如下

$(”img “).each(function(i){//遍历本页所有的图片
var src = $(this).attr(”src”);
if( src.indexOf(’ggpht’)!=-1 ){//如果图片来自某个地方,则替代之
$(this).attr(”src”,”http://0bad.com/readimg.php?src=”+src.replace(”ggpht”,”gouride”) );//则将图片地址改成转发的地址,记住ggpht替代掉,因为这个会触发墙
}
});

上面的全角字母请自行改成半角字母(请保证你主题引入了jquery )

至于那个php文件,请到这里下载:pika 然后放置到你国外的空间。ache和cache下的所有文件夹属性请设置成0777

另外,请大家低调发表评论,不要带上关键字,被和谐怕了

另,效果请参见右上角的homezz图片。

php插件方式将会在明天发布,届时feed中的图片也会正常显示!

此举仅仅是为了正常的blog能正常的显示图片,本人不敢造次!

不太熟悉如何使用的朋友,请等待我的插件发布!

web 500错误的原因可能有哪些

类归于: PHP, 网站技术, 虚拟主机 — 江东 @ 2009-06-24 09:47:30 才(2)条评论

可能原因如下:

web根目录权限错误。解决办法,将根目录的权限由错误的777改成755,参见下图。

php文件属性错误。解决办法,将php文件的属性改成 644

.htaccess文件错误 。 解决办法,修改.htaccess文件的内容,若在ftp下无法查看.htaccess文件,请用在本机制作一个空的.htaccess文件,上传覆盖之;

如何修改文件和文件夹的权限,请参考下图:

capanel文件管理器中:

(read on …)

写了一个基于ajax的图片文件管理器

类归于: PHP, 网站技术, 虚拟主机 — 江东 @ 2009-06-13 20:52:17 才(15)条评论

用了一天的时间做了一个简单的文件管理器。

特点:

  1. 整个程序就一个文件,毕竟是用来管理图片的,php和其他文件过多不好打理;
  2. 不需要数据库,直接基于正常文件结构;
  3. 只可上传web能正常显示的图片格式(jpg,png,gif);
  4. ajax采用了缓存。文件目录一旦打开,浏览器不刷新,再次关闭和打开不会重复读取服务器内容,节约时间,这个功能耗费了80%的时间,因为要考虑到用户上传图片,修改文件夹之后缓存的局部更新;
  5. ctrl+鼠标左键可以选择多张图片;

目前还没有添加用户登录验证功能!欢迎大家去围观:0bad.com,目前只能保证在FireFox上最正常。

写在后面。有了jquery,处理dom真的好方便,缓存是本程序最伤脑筋的地方,一方面为了节约用户时间,所以load之后的数据必须以变量的方式缓存在浏览器里面,这个很简单,最麻烦的就是当用户创建文件夹、创建文件、删除文件夹、删除文件,一方面要保持左边的树形不要变化,另外一方面还好保证需要更改的缓存得以及时的更新。这个逻辑太麻烦了,所以现在依然有bug,可能还不少。

phpmyadmin无法导入大的SQL解决方案

类归于: PHP, 网站技术 — 江东 @ 2009-05-10 11:16:20 才(13)条评论

其实导入SQL的最快的方法还是直接登录到服务器上,直接命令行导入,没有开通SSH的服务器可以通过其他服务器中转导入,但是这些方法对于不熟悉linux命令的朋友都显得比较麻烦。所以,我昨天晚上就花了一点时间,写了一个简陋的php文件,用于导入大的sql到新的mysql数据库中。

内容如下
define('DB_NAME', 'wordpress');
define('DB_USER', 'wordpress');
define('DB_PASSWORD', 'wordpress');
define('DB_HOST', 'localhost');
/*直接copy您wordpress数据库设置部分即可*/
$mysql = mysql_connect(DB_HOST,DB_USER,DB_PASSWORD) or die("mysql connect fail, wrong password");
mysql_select_db(DB_NAME)or die("select DB fail");
mysql_query("set names utf8");
$fp = fopen("db.sql","r") or die('can not open file');
while( $s = fgets( $fp,100000 ) ){
$m .= $s;
}
$sql_content = explode(";\n",$m);
$i = 0;
$max = count($sql_content) ;
while( $i < $max ){
mysql_query( $sql_content [$i] );
if( mysql_error()) echo mysql_error()."<br />";
else{
$n ++;
}
$i ++;
}
echo "<br />mysql queries:".$n;
fclose($fp);

导入就很简单了,将需要导入的sql文件命名为db.sql,上传到网站根目录,将上面的代码保存为import.php也上传到根目录,然后运行import.php,即可完成数据库的导入。
当然,您也可以直接下载这个文件:import

注意:导入之后,请一定要删除或者重命名这个import.php文件

Cannot modify header information

类归于: PHP, 网站技术 — 江东 @ 2009-03-28 19:19:19 才(7)条评论

请php熟练者略过此文。

既然你打算继续往下看,说明你不熟悉php或者正在入门,那么我就用最简单(不会假装高深的搬出http 协议中header的解释,其实我也不会)的说说出现这样问题的原因:

当php程序出现cannot modify header information错误的时候,从cannot modify header information的字面不难理解,表示程序无法发送header信息,一般的出错信息完整的应该是类似Warning: Cannot modify header information – headers already sent by的提示。那么下面几种情况会出现Cannot modify header information

  1. 单独的php文件session_start()之前有echo print等等输出;
  2. 在setcookie之前有echo print等等输出;
  3. 在set cookie和session_start之前有包含的文件,而这个包含的文件有输出;
  4. 在set cookie和session_start之前有包含的文件,而这个包含的文件为html或者含有html(包括<?php ?>外面的空格);
  5. 程序文件<?php之前不小心打了一个空格;
  6. 带有bom的utf8编码文件,因为有bom,所有在<?php之前其实有编辑器看不到的输出;

总之,出现这个问题的根源只有一个:那就是在session_start和setcookie之前有输出的都会出现Cannot modify header information的错误。无论是程序本身echo出来的、被include 进来的程序echo的还是php代码之外的html存在空格它们统统都是输出。

所以你若是使用wordpress,第一次安装进入后台,发现Cannot modify header information之类的错误,首先要要检查的就是wp-config.php文件中<?php之前和?>之后是不是不小心打了换行或者空格符号?是的话,则删除之。检查wp-config.php是不是utf8编码?管他是不是,用编辑器(下载一个editplus的试用版本)打开,另存为的时候,选择UTF-8再次覆盖保存即可。

host.storyday.com集成了部分Cpanel功能

类归于: PHP, 网站技术 — 江东 @ 2009-03-20 15:44:52 才(18)条评论

生活点滴虚拟主机 发现Cpanel还是比较强大的,也提供了API函数供第三方集成,使用起来很方便,因此cosbeta为了方便管理,把部分Cpanel的功能集成到了host.storyday.com中。

目前host.storyday.com可以自动将到期用户挂起,10日之后若不续费,挂起用户将被删除。

今天干脆把Cpanel登录也集成到host.storyday.com的后台中,这样用户就只需要登录host.storyday.com即可,登录Cpanel就不需要再次输入用户和密码了,应该会很方便,如左图所示,点击那个Cpanel的图标就可以自动登录到后台进行管理了。

同样,cosbeta也用比较BT的办法将支付宝支付直接集成进来了。这样用户续费的时候就可以直接给我支付宝汇款(因为是续费,已经使用过cosbeta的服务,所以不存在信用的问题了),然后按照流程操作即可,如下图所示:

生活点滴虚拟主机

点击续费一年,然后直接给cosbeta打款,付款回来之后,在上面的表格中填写上详细的信息:转帐金额、交易编码、真实姓名,然后点击确认,我们的系统便会去模拟人工操作:连接支付宝,查看当日交易记录,搜索交易编码、交易金额、交易人的姓名,系统一旦找到符合标准的直接转帐,便会自动将帐户续费一年,同时将此笔交易标记为已经操作。

当初有朋友在twitter问我,若是你的接口出错了怎么办?其实是没有关系的,因为这个接口只是模拟人工检查交易记录,即使检查失败,完全可以发邮件给我,我也可以人工再次检查。毕竟直接转帐是通过支付宝操作的,所以资金不存在任何风险。

就写到这里,完善一个系统是一个漫长的过程!

phpmailer 连接Gmail和web发送短信

类归于: PHP, 网站技术 — 江东 @ 2009-03-14 22:48:17 才(4)条评论

折腾了一个小时,终于将在线发送短信给折腾成功了,哇,网友能在线给webmaster发短信,真的好高深啊!其实未必,下面我就介绍相关的一些解决方法。

首先是如何通过php连接pop3发送邮件。在旧版本的phpmailer中,要连接Gmail可不是那么一件容易的事情,需要修改核心代码,但是在新版的phpmailer中,这个问题就被完美的解决了,首先请下载phpmailer,然后利用cosbeta写的这个发送邮件的函数:

(read on …)