Feb 26

最近不知道为什么…orkut上总是有人加我!

written by doo \\ tags:

Feb 26

出错历史:
我编写的代码从来没有顺利的执行过,可是由于本地环境和主机环境不一样,所以有的时候在本地测试合格放到主机上则不行,而有的时候则相反..
这次是一段函数出错了,错误提示:

Warning :  Cannot  modify  header  information  -  headers  already  sent  by  (output   started   at   xxx.php:32)  in  xxx.php on  line 34

我询问了花儿zhiqiang,前者给我的答复如下:

xxx.php,把文件开头的空格全都去掉,如果是 UTF-8 格式保证文件头部没有 BOM。
如果不是这个原因,就要检查你的代码,在调用 header 命令之前,不要有任何输出。

我开始在所有的php页头查找bom,无果..后来用UltraEdit32(默认我是用Notepad++)从新全部保存了一遍无BOM格式.上传后问题依旧.没有办法,我建立了一个”del_bom.php”,代码如下:

下载: del_bom.php
<?php
$basedir        = "."; //修改此行為需要檢測的目錄,點表示當前目錄
$auto                = 1; //是否自動移除發現的BOM信息。1為是,0為否。
 
//以下不用改动
 
if ($dh = opendir($basedir))
{
        
while (($file = readdir($dh)) !== false)
        
{
                
if ($file != '.' && $file != '..' && !is_dir($basedir . "/" . $file))
                        
echo "filename: $file " . checkbom("$basedir/$file") . "<br>";
        
}
        
closedir($dh);
}
 
function checkbom ($filename) {
        
global $auto;
        
$contents                = file_get_contents($filename);
        
$charset[1]        = substr($contents, 0, 1);
        
$charset[2]        = substr($contents, 1, 1);
        
$charset[3]        = substr($contents, 2, 1);
        
if (ord($charset[1]) == 239 && ord($charset[2]) == 187 && ord($charset[3]) == 191)
        
{
                
if ($auto == 1)
                
{
                        
$rest        =        substr($contents, 3);
                        
rewrite ($filename, $rest);
                        
return ("BOM found, automatically removed.");
                
}
                
else
                
{
                        
return ("BOM found.");
                
}
        
}
        
else return ("BOM Not Found.");
}
 
function rewrite ($filename, $data)
{
        
$filenum        = fopen($filename, "w");
        
flock($filenum, LOCK_EX);
        
fwrite($filenum, $data);
        
fclose($filenum);
}
?>

运行后还是不行,我想应该不是BOM的问题..我仔细看了一遍提示出错的XXX.php…发现提示的错误行代码我是这样写的:

下载: XXX.php
//执行SQL语句
    
if(mysql_query($sql))
    
{
      
echo 'var recorded = true; alert($ip);';
      
//设定Cookie值,设置1天后失效
      
setcookie("visited", true, time()+3600*24);
    
}
    
else  //插入失败
    
{
      
echo 'var recorded = false; alert($ip);';
      
//设定Cookie值,失效时间为过去,即删除该Cookie
      
setcookie("visited", false, time()-3600*24);
    
}

花儿给我的提示是:在调用 header 命令之前,不要有任何输出
我想起PHP中stecookie前世不能echo的..但是无法,这段代码是必须的,我在CSDN上询问,专家给出解决办法,修改如下:

下载: xxx.php
//执行SQL语句
    
if(mysql_query($sql))
    
{
      
//设定Cookie值,设置1天后失效
      
setcookie("visited", true, time()+3600*24);
    
echo 'var recorded = true; alert($ip);';
    
}
    
else  //插入失败
    
{
      
//设定Cookie值,失效时间为过去,即删除该Cookie
      
setcookie("visited", false, time()-3600*24);
      
echo 'var recorded = false; alert($ip);';
    
}

这段代码我之前也测试过,不行,错误提示:找不到$ip
无奈,我又询问了花儿解决办法.答复如下:

用 ob_start() ob_flush() 这套函数吧

正当我修改代码后要上传的时候,发现错误提示不见了.并且数据库中出现了点变化.
以前我用同一页面强制刷新后数据库中会增加一条记录,而现在不会了.我再用其他浏览器登录,数据库中又会增加一条数据.
那就是说说cookie的设置生效了.
到这里事件结束,可是我有点摸不着头脑为何..代码依然还是以前的代码…
等我查阅相关资料后补充这篇post.

在此感谢花儿

PS:后来又断断续续出现此问题,没有办法,加上了ob_start(); 代码..问题不在出现了…

written by doo \\ tags: , ,

Feb 25

这个问题花了不少时间来解决..中间不得不先关闭了站点和论坛.

说实话,我也不太想弄这两样东西.其实对于我来说有一个blog就足够了,可是一个CG站点毕竟是我们三个人的一个梦.so…我还是弄起来了.

闲话少说,说说关于这两样东西的静态化问题.
后台设置是傻瓜化的,我这里不赘述了.说说头文件吧.
PS:我以下的修改必须要求主机环境支持.htaccess和mod_rewrite这两个功能.否则怎么设置也白搭.

首先是SupeSite的.htaccess设置:

下载: web.htaccess
###############################################################################
###        Apache Web Server(虚拟主机用户)
###############################################################################

###        在开始以下设置之前,请首先咨询您的空间服务商
###        空间是否支持 Rewrite 以及是否支持对站点目录中 .htaccess 的文件解析
###        否则即便按照下面的方法设置好了,也无法使用

###        将 RewriteEngine 模式打开
RewriteEngine On

###        修改以下语句中的 /supesite 修改为你的SupeSite目录地址,如果程序放在根目录中,请将 /supesite 修改为 /
RewriteBase /supesite

###        Rewrite 系统规则请勿修改


RewriteRule ^action/(.+)$ index.php?action/$1
RewriteRule ^i([0-9]+)(.*)$ index.php?action/viewspace/itemid/$1$2
RewriteRule ^t([0-9]+)(.*)$ index.php?action/viewbbs/tid/$1$2
RewriteRule ^([0-9]+)/tplid(.*)$ index.php?action/space/uid/$1/tplid$2
RewriteRule ^([0-9]+)/starttime(.+)$ index.php?action/spacelist/uid/$1/starttime$2
RewriteRule ^([0-9]+)/type(.+)$ index.php?action/spacelist/uid/$1/type$2
RewriteRule ^([0-9]+)(.*)$ index.php?action/space/uid/$1$2
RewriteRule ^index(.*)$ index.php

###        添加内容时,请遵照上面的提示,修改SupeSite所在的路径
###        然后保存。将 .htaccess 文件上传到SupeSite所在的目录中
###        进入SupeSite 系统设置,根据需要开启 URL 静态化 功能

###############################################################################

其次是论坛的.htaccess设置:

下载: bbs.htaccess
###############################################################################
###        Apache Web Server(虚拟主机用户)
###############################################################################
###        在开始以下设置之前,请首先咨询您的空间服务商
###        空间是否支持 Rewrite 以及是否支持对站点目录中 .htaccess 的文件解析
###        否则即便按照下面的方法设置好了,也无法使用

###        将 RewriteEngine 模式打开
RewriteEngine on

###        修改以下语句中的 /bbs 修改为你的论坛目录地址,如果程序放在根目录中,请将 /bbs 修改为 /
RewriteBase /Discuz!

###        Rewrite 系统规则请勿修改
RewriteRule ^archiver/([a-z0-9\-]+\.html)$ archiver/index.php?$1
RewriteRule ^forum-([0-9]+)-([0-9]+)\.html$ forumdisplay.php?fid=$1&page=$2
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ viewthread.php?tid=$1&extra=page\%3D$3&page=$2
RewriteRule ^profile-(username|uid)-(.+)\.html$ viewpro.php?$1=$2
RewriteRule ^space-(username|uid)-(.+)\.html$ space.php?$1=$2
###        添加内容时,请遵照上面的提示,修改论坛所在的路径
###        然后保存。将 .htaccess 文件上传到Discuz!所在的目录中
###        进入Discuz!系统设置,根据需要开启 URL 静态化 功能

###############################################################################

written by doo \\ tags: , , , ,

Feb 25

终于将Google maps api搞定

written by doo \\ tags:

Feb 25

利用Google API来完成访客地图标注是完成了,可是似乎遇到了一些问题.

在我的数据库中查询是有其他人来访的,可是由于地理位置的重叠,所以相同位置的地标被覆盖!
也就是说同地理位置的访客只显示第一位到访的地标以及其他IP信息等..

这似乎是一个蛮难缠的问题..

留到以后解决吧@现在睡觉了.

PS:由于服务器是美国的,所以时间上也出现了问题.默认以美国时间作为登录时间!头疼.

written by doo \\ tags: , , ,