UC密码正确无法登录后台的解决方法

  1. 登录远程主机或者打开FTP连接工具

  2. 打开网站所在目录,找到以下文件 /uc_server/model 中找到admin.php

  3. 打开 /uc_server/model/admin.php这个文件

  4. 找到代码function adminbase() {                parent::__construct();                this->cookie_status = 0;               sid = this->cookie_status ? getgpc(‘sid’, ‘C’) :rawurlencode(getgpc(‘sid’, ‘R’));               this->sid = this->view->sid =this->sid_decode(sid) ?sid : ”;

  5. 5

    将此部分代码 this->cookie_status = 0;  修改为 this->cookie_status = isset($_COOKIE[‘sid’]) ? 1 : 0;

  6. 6

    代码修改完后的完整信息

    function adminbase() {                parent::__construct();                this->cookie_status = isset(_COOKIE[‘sid’]) ? 1 : 0;                sid =this->cookie_status ? getgpc(‘sid’, ‘C’) :rawurlencode(getgpc(‘sid’, ‘R’));                this->sid =this->view->sid = this->sid_decode(sid) ? $sid : ”;

  7. 7

    保存文件,登录后台更新网站即可

php及xdebug使用小结

php下搭配使用xdebug是十分好的组合,用于php的调试工作,下面分别介绍之:
1 WINDOWS下的安装
下载站点http://www.xdebug.org/
要确定使用一个跟你的PHP配合的版本才行,比如xdebug中的5。2系列版本是跟5.2
的php搭配的,5.3系列的跟5.3的PHP搭配的。目前的版本是2。1,然后你会发现
有相应的线程安全和非安全两个版本。如何知道下载哪个版本呢,可以将你跑
PHPINFO时的显示出来网页的源代码,COPY到
http://www.xdebug.org/find-binary.php中,然后提交,然后XDEBUG为告诉你
应该下载哪个版本了

将下载的文件放到d:\php\ext目录,重命名为php_xdebug.dll。
然后修改PHP。INI如下:
[Xdebug]
zend_extension=”D:\php\ext\php_xdebug.dll”
xdebug.profiler_output_dir=”D:\php53\xdebug”
xdebug.profiler_enable=On
xdebug.profiler_enable_trigger=1
xdebug.default_enable=On
xdebug.show_exception_trace=On
xdebug.show_local_vars=1
xdebug.max_nesting_level=50
xdebug.var_display_max_depth=6
xdebug.dump_once=On
xdebug.dump_globals=On
xdebug.dump_undefined=On
xdebug.dump.REQUEST=*
xdebug.dump.SERVER=REQUEST_METHOD,REQUEST_URI,HTTP_USER_AGENT
xdebug.trace_output_dir=”D:\php53\xdebug”

注意要建立一个xdebug目录放调试输出的文件。
重新启动apache,在phpinfo中就可以看到有关XDEBUG的部分了

2 LINUX下的安装
tar -xzf xdebug-2.0.0RC3.gz
cd xdebug-2.0.0RC3
/usr/local/php/bin/phpize
./configure –enable-xdebug
cp modules/xdebug.so /usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/

注:/usr/local/php/lib/php/extensions/no-debug-non-zts-20020429/不同的PHP版本路径不同,也不一定要放在该路径,可以在zend_extension_ts中自行指定xdebug.so所在位置。

3 使用,可以写个简单程序去看效果,比如:

php 模仿蜘蛛抓取内容并分析

header(“Content-Type:text/html;charset=gbk”);
message=_POST[‘message’];
contents = @file_get_contents(“message”);
if(contents==”Forbidden”){ch = curl_init();
timeout = 5;
curl_setopt (
ch, CURLOPT_URL, “message”);
curl_setopt (
ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt (ch, CURLOPT_USERAGENT, “Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)”);
curl_setopt (
ch, CURLOPT_CONNECTTIMEOUT, timeout);contents = curl_exec(ch);
curl_close(
ch);
}
preg_match_all(“/<title(.*?)</title>/is”,contents,title);
preg_match_all(“/<meta(.*?)>/is”,contents,meta);
preg_match_all(“/<body(.*?)body>/is”,contents,body);
echo ‘title:’.strip_tags(title[0][0]).'<br><br>’;
for(
i=0;i<count(meta[0]);i++){
if(preg_match(“/keywords/i”,
meta[0][i])){
preg_match_all(“/content=”(.*?)”/is”,
meta[0][i],keywords);

}
if(preg_match(“/description/i”,meta[0][i])){
preg_match_all(“/content=”(.*?)”/is”,meta[0][i],description);

}
}
echo ‘keywords:’.strip_tags(keywords[1][0]).'<br><br>’;
echo ‘description:’.strip_tags(description[1][0]).'<br><br>’;
echo ‘body:’.strip_tags(
body[0][0]);
?>

ThinkPHP 3.2.3 bug 列表(2015-1-15)

下载TP 3.2.3,将本地的TP3.2.2升级。发现一些仍未修复和新的bug(欢迎交流,如需转载,请著名来自 default.fu@foxmail.com):

1)文件 ThinkPHP/Library/Behavior/TokenBuildBehavior.class.php 第47行:

原代码:tokenValue = tokenType(microtime(TRUE)) ;

应改为:tokenValue = is_callable(tokenType) ? $tokenType(microtime(TRUE)) : md5(microtime(TRUE));

否则会:执行报错!

2)文件:ThinkPHP/Library/Think/Upload/Driver/Bcs/requestcore.class.php 开头:

应该将开头的如下3行 namespace  注释掉,否则会报错重复定义!

  1. use Think\Upload\Driver\Bcs\BCS_RequestCore;  
  2. use Think\Upload\Driver\Bcs\BCS_ResponseCore;  
  3. use THink\Upload\Driver\Bcs\BCS_RequestCore_Exception;  



3)文件:ThinkPHP/Library/Behavior/WriteHtmlCacheBehavior.class.php 应该将 只允HTTP头为 2xx 的时候才保存本地缓存

1筛选条件文件名不为空

2且HTTP头为2xx

应该改为如下:

  1. namespace Behavior;  
  2. use Think\Storage;  
  3. /** 
  4.  * 系统行为扩展:静态缓存写入 
  5.  */  
  6. class WriteHtmlCacheBehavior  
  7. {  
  8.   
  9.     // 行为扩展的执行入口必须是run  
  10.     public function run(&$content)  
  11.     {  
  12.         //2014-11-28 修改 如果有HTTP 4xx 3xx 5xx 头部,禁止存储  
  13.         //2014-12-1 修改 对注入的网址 防止生成,例如 /game/lst/SortType/hot/-e8-90-8c-e5-85-94-e7-88-b1-e6-b6-88-e9-99-a4/-e8-bf-9b-e5-87-bb-e7-9a-84-e9-83-a8-e8-90-bd/-e9-a3-8e-e4-ba-91-e5-a4-a9-e4-b8-8b/index.shtml  
  14.         if (C(‘HTML_CACHE_ON’) && defined(‘HTML_FILE_NAME’)  
  15.             && !preg_match(‘/Status.*[345]{1}\d{2}/i’, implode(‘ ‘, headers_list()))  
  16.             && !preg_match(‘/(-[a-z0-9]{2}){3,}/i’,HTML_FILE_NAME)  
  17.         ) {  
  18.             //静态文件写入  
  19.             Storage::put(HTML_FILE_NAME, $content‘html’);  
  20.         }  
  21.     }  
  22. }  

4)文件:ThinkPHP/Library/Think/Storage/Driver/File.class.php 第45行:

原代码:mkdir($dir,0755,true);

应改为:mkdir($dir,0777,true);

否则会:在部分主机比如WIN VPS下会出现写入权限问题,写入失败。

原创by default.fu@foxmail.com

 

ThinkPHP使用技巧

1、让Runtime下的文件格式化:入口文件处:define(‘STRIP_RUNTIME_SPACE’,false);

2、开发时不进行缓存:入口文件处:define(‘NO_CACHE_RUNTIME’,true);
3、ThinkPHP支持四种访问模式:a:普通模式 b:pathinfo模式 c:rewrite模式 d:兼容模式 在配置文件中用URL_MODEL=0(1、2、3)来表示。
4、改变分隔线/:URL_PATHINFO_DEPR。默认为:/
5、跨模块<控制器>调用模板方法:模块<控制器名:模板名(不加后缀)>,如$this->display(‘Index:tt’);
6、跨皮肤调用模板方法:假如Tpl下有skin皮肤,该皮肤下有User文件夹,该文件夹下有sg.html,那么$this->display(‘skin@User:sg’);就跨皮肤调用了。
7、全路径输出:在工程目录<非项目目录>下,建一个Public文件夹,这就是公共文件,可以将js文件放在这里供前后台共用。现在假设Public文件夹下有一个ss.html文件,那么
      $this->display(‘./Public/ss.html’);就输出公共文件中的ss.html模板。
8、display的参数:依次为:模板名,编码格式,mimie。如:$this->display(‘./Public/ss.html’,’utf-8′,’text/xml’);
9、系统常量:
__ROOT__  //代表网站的根目录地址
__APP__  //代表项目的入口文件地址
__URL__  //代表当前操作地址
__ACTION__  //代表当前操作地址
__SELF__  //代表当前的URL地址
__CURRENT__  //代表当前模块的模板目录
__PUBLIC__  //代表整个项目的公用目录
__TMPL__  //代表整个项目的模板目录,如Tpl/default/
ACTION_NAME  //当前操作名称
APP_PATH  //代表当前项目目录
APP_NAME  //代表当前项目名称
APP_TMPL_PATH  //代表当前项目的模板目录
APP_PUBLIC_PATH  //代表项目公共文件目录
CACHE_PATH  //项目模板缓存目录
10、配置文件中一些有用的参数:
‘SHOW_RUN_TIME’=>true,//运行时间显示
‘SHOW_ADV_TIME’=>true,//显示详细的运行时间
‘SHOW_DB_TIMES’=>true,//显示数据库的操作次数
‘SHOW_CACHE_TIMES’=>true,//显示缓存操作次数
‘SHOW_USE_MEM’=>true,//显示内存开销
11、halt();//中断程序执行。
12、dump是ThinkPHP里面预定义好的一个函数,具有显示更清晰的作用。
13、读取配置文件其中信息:C,如:$a=C(‘DB_HOST’);这种情况可用于在后台中向管理员显示服务器IP,数据库信息等。
14、自定义Model类并在实例化模型<模型就是数据库操作类>时使用,如:
a、在工程目录下的home<前台文件夹>下的Lib下的Model下建立一个IndexModel.class.php,然后里面写一个方法play,此方法循环输出1至10。
b、在Action中的方法里:
$index=M(‘index’,’IndexModel’); //这里可以加上自定义的模型类一起实例化
$index->play();
那么会输出1至10。
15、实例化模型可以用D也可以用M,M是快速实例化,且可带参,如M(‘User’,’play’);//play是一个对应的模型类。也可以$user=new UserModel();
16、D方法可以自动检测模型类,不存在时它会抛出一个异常。同时对于已实例化过的模型,不会去重复实例化。默认的D方法只能支持调用当前项目(应用)下面的模型。
17、ThinkPHP的分组功能:如果现在想在前台实合例化后台模型,那么:
$admin=D(‘admin.user’);
dump($admin->find());
将输出后台模型数据,这就是分组功能。
18、CommonAction中的_initialize方法让每一个继承它的类的每个方法都要经过_initialize。think_access表要加个pid(int11)字段。四张表是必须的,但是还需要一张user表,里面字段自定。
19、解决ThinkPHP中使用Smarty然后include方法无效的办法:不是不支持,但是路径没有那么智能,比如Tpl的default下的Task模块下有一test.html文件,那么,请用<{include file=’default/Task/test.html’}>以下为引用的话:
include所包含的文件由file属性来指定,路径相对于template_dir,也就是所如果你在使用smarty的时候设置模板路径template_dir假设为Tpl,那么file的文件就应该相对于Tpl文件来取,就你的例子
{include file=”Public/header.html”}的话,那么header.html要放在Tpl下的Public文件夹下。
其实,在Smarty类中把include函数改一下让它输出路径,那么这问题将很好查找。
20、关联模型:尝试了很多次,它一直提示找不到relation方法,就在准备放弃那一秒,奇迹真的出现了:它可以了,配置还是那个配置,真的未改动,那个配置也没什么怀念的,还是记录一下吧:
UserModel.class.php如下:
<?php
class UserModel extends RelationModel{
     public $_link = array(
     ‘phone’=>array(
     ‘mapping_type’=>HAS_ONE,
     ‘foreign_key’=>’uid’,
                  ),
);
}
?>
IndexAction.class.php如下:
 public function index()
    {
$user=D(‘user’);
$users=$user->relation(true)->find(1);
dump($users);
    }
21、关闭ap.php缓存:配置文件中:  APP_DEBUG=>true,
22、ThinkPHP中判断为空的方法:<present name=”name”>name已经赋值<else /> name还没有赋值</present>
23、ThinkPHP原生模板中if语句中session判断的问题:
      正确使用如下:
      <if condition=”$_SESSION[‘level’] egt 2″>
     <a href=”>收藏此人才</a>
     </if>
     正解:
由于 if 标签的 condition 属性里面基本上使用的是 php 语法,尽可能使用判断标签和 Switch 标签会更加简洁,原则上来说,能够用 switch 和比较标签解决的尽量不用 if 标签完成。因为 switch 和比较标签可以使用变量调节器和系统变量。如果某些特殊的要求下面, IF 标签仍然无法满足要求的话,可以使用原生 php 代码或者 PHP 标签来直接书写代码
<eq name= “Think.session.disEdit” value= “1”>。。。。。</eq>  这个没试,但已明白
<if condition=”$_SESSION[‘disEdit’] eq 1″>   这个是可以的

24、分组模式配置:

  //分组模式配置
‘APP_GROUP_LIST’=>’Index,Job,Member,Shop’,
‘DEFAULT_GROUP’=>’Index’,
25、_initialize这个函数不太好记,卧槽,记这里吧。
26、Thinkphp开发时关闭缓存的方法:
 

因在开发中需要经常修改,从而要经常删除缓存,才能看到效果。

所以为了开发的方便,可以把缓存给去除。

1.找到\ThinkPHP\Common\convention.php和\ThinkPHP\Common\debug.php

2.打开这两个文件找到你想要的设置即可。

debug.php中

‘TMPL_CACHE_ON’=>false,      // 默认开启模板缓存

convention.php中’

TMPL_CACHE_ON’   => false,  // 默认开启模板编译缓存 false 的话每次都重新编译模板

‘ACTION_CACHE_ON’  => false,  // 默认关闭Action 缓存

‘HTML_CACHE_ON’   => false,   // 默认关闭静态缓存

27、中文字符长度截取:{$vo[‘title’]|mb_substr=###,0,16,’UTF-8′},这是支持中文的,很好用。

28、ThinkPHP2.1中,如果想开启debug后显示页面运行时间,那么要在页面中加入{__RUNTIME__}才可以的。
29、HTML压缩:
TMPL_STRIP_SPACE
这个不是压缩 只是去空白和注释
30、模板后缀设置:’TMPL_TEMPLATE_SUFFIX’ => ‘.tpl’

如何解决DISCUZ! X3.1 通知翻页BUG问题

最近无忧主机小编遇一个discuz论坛的小bug,在运营DiscuzX3.1论坛的时候你会发现,是不是通知里面的帖子、点评、活动、悬赏、商品、提到我的、系统提醒里的翻页都是翻着就去了帖子里的对应页了?如果是正常的翻页的话,点击下一页还是这个栏目的内容而不是跳到帖子的内容页。这个问题是点击下一页的判断事件没有做好,所以只要增加对应的类型判断就可以解决这个问题啦!下面操作需要改代码,请大家做好文件备份:
需要修改文件路径:include/space/space_notice.php
需要修改的文件:space_notice.php
操作步骤:
1.把网站空间上面的space_notice.php文件通过FTP工具下载到本地,用高级记事本编辑修改,主要是防范文件编码格式问题;
2.打开文件后,找到代码:
multi = multi(count, perpage,page, “home.php?mod=space&do=do&isread=1″);
修改为:
pageurls = “home.php?mod=space&do=do&view=view”;
if(!empty(type)){pageurls .= “&type=type”;
}
multi = multi(count,perpage, page,pageurls);

3.代码修改完了以后,保存文件,上传到空间的指定目录下面,Discuz后台更新缓存即可。这里就是是定义了$pageurls类型属性,下面的if就是对这个类型进行判断,最后再调用即可解决这个问题了。

来源网站:http://www.51php.com/discuz/17497.html

Apache支持shtml实现include文件解析的配置方法

1. 确认加载include.so模块,将注释去掉: 
LoadModule include_module libexec/apache2/mod_include.so 

2. AddType部分去掉这两段注释: 
AddType text/html .shtml 
AddOutputFilter INCLUDES .shtml 

3. Directory目录权限里面找到 
Options Indexes FollowSymLinks 
增加Includes修改为: 
Options Indexes FollowSymLinks Includes 

4. 重新启动Apache,测试: 

<!–#include file=”head.html”–> 
Holle Word!,这是中间的内容 
<!–#include file=”foot.html”–> 

以下是其它网友的补充: 

什么是SSI? 
SSI是英文Server Side Includes的缩写,翻译成中文就是服务器端包含的意思。从技术角度上说,SSI就是在HTML文件中,可以通过注释行调用的命令或指针。SSI具有强大的功能,只要使用一条简单的SSI命令就可以实现整个网站的内容更新,时间和日期的动态显示,以及执行shell和CGI脚本程序等复杂的功能。 

如何使你的Apache服务器支持SSI? 

Apache默认是不支持SSI的,需要我们更改httpd.conf来进行配置。我这里以windows平台的Apache 2.0.x为例,打开conf目录下的httpd.conf文件,搜索“AddType text/html .shtml”,搜索结果: 

复制代码代码如下:
# AddType text/html .shtml
# AddOutputFilter INCLUDES .shtml



把这两行前面的#去掉。 

然后搜索“Options Indexes FollowSymLinks” 
在搜索到的那一行后面添加“ Includes” 
即将该行改变为 Options Indexes FollowSymLinks Includes 

保存httpd.conf,重起apache即可。 

到此我们就完成了对Apache SSI的设置。

ThinkPHP实现静态缓存和动态缓存

利用ThinkPHP既可以很容易实现页面静态化(静态缓存),又可以很容易实现动态缓存(文件缓存和memecache缓存等)

工具/原料

  • memcached.exe

  • php_memcache.dll

方法/步骤

  1. 弄清静态缓存和动态缓存的用途:

    静态缓存:生成静态页面——缓存的是整个页面;

    动态缓存:仅对数据库中的数据进行了缓存,即“通过动态缓存,不需要再读取数据库了,直接通过缓存文件来调取相应数据”;

  2. 第二步:静态缓存的实现,在config.php文件中作如下配置:

    ThinkPHP实现静态缓存和动态缓存
  3. 动态缓存的实现方式“文件缓存”(默认方式):

    ThinkPHP的S()函数将“从数据库中获得的数据”缓存到“文件”中;

    //S(‘缓存名称’,’缓存数据’,’缓存时间’)—缓存文件默认保存到“Runtime/Temp/”文件夹

    存数据:S(‘index_list’,list,10); //list:是从数据库中读取的数据

    读数据:S(‘index_list’); //直接从缓存文件读取,不再经过数据库

  4. 动态缓存的实现方式“memecache缓存”,需先安装Memcached

  5. 再开启memecache缓存,在config.php中作如下配置

    ThinkPHP实现静态缓存和动态缓存
  6. 6

    其次通过S()函数实现“memecache缓存”:

     

    ThinkPHP的S()函数将“从数据库中获得的数据”缓存到“内存”中;

    存数据:S(‘index_list’,$list,10);

    读数据:S(‘index_list’)

  7. 7

    至此,你可以利用ThinkPHP实现静态缓存和动态缓存了

    END

注意事项

  • 安装Memcached时,需下载正确版本的php_memcache.dll文件

    http://jingyan.baidu.com/article/93f9803fea7cf4e0e46f55ad.html

php转换\\u(UNICODE)字符串为汉字

<?php
test = ‘\u53c2\u8d5b\u56e2\u961f\u65b9\u6848\u540d\u79f0’; //庆重庆temp = explode(‘\u’,test); //拆分成数组rslt = array(); //保存结果的数组
array_shift(temp); //去掉第一个不含数据的
foreach(
temp as k =>v) {
v = hexdec(v); //将16进制转换成十进制
rslt[] = ‘&#’ .v . ‘;’; //转换成html实体
}
rslt = implode(”,rslt); //组合结果数组成字符串

echo $rslt;
?>

Ajax+jQuery: $.post() 与 Access-Control-Allow-Origin.

写了个json数据接口,为了方便调试,html和js部分就直接在本地用浏览器打开调试

结果提示这个错误

XMLHttpRequest cannot load Origin “xxx” is not allowed by Access-Control-Allow-Origin.

查过是js的安全机制有关,默认不允许跨域调用

解决方法(PHP版)

在接口源码内声明

header(‘Access-Control-Allow-Origin: *’); //只允许特定的而另一个域名访问,把*替换成特定被允许的域名

或者..把html文件上传到服务器上。