很久没更新了,那么就转载一篇文章吧

阅读全文>>

很久没更新了,那么就转载一篇文章吧

阅读全文>>

<?php

/**
 * @desc curl 方法的实现
 * @author Aboc QQ:9986584
 * @version 1.0
 *
 */
class Curl {

    /**
     * url地址
     *
     * @var unknown_type
     */
    private $_url = '';
...

阅读全文>>

用fsockopen连接25端口,提示“由于目标机器积极拒绝,无法连接。(10061)”。百度N久,才发现是该死的McAfee,去掉访问保护里的防病毒标准保护=》禁止群发邮件蠕虫发送邮件前的阻止的勾去掉就好了。。

这个问题我两年前就遇到过,可惜忘记了,唉,杯具。

阅读全文>>

我原创的一个小插件,有兴趣的童鞋可以安装试试。
会增加两个表在数据库中,分别记录了分类和网址。

嗯,加个演示地址吧 http://www.phpec.org/?plugin=site

 

可以去这里下载 http://www.emlog.net/plugin/download/40


阅读全文>>

2012-2-16 16:54 Thursday  

每次修改都要找,今天把位置记录下来。

文件路径是:

ckfinder\core\connector\php\php5\Utils\Misc.php中

原函数是:

public static function mbBasename($file)
    {
        $explode = explode('/', str_replace("\\", "/", $file...

阅读全文>>

已经存在__autoload函数的时候,
如果再别的文件中再使用spl_autoload_register方法的话会使得原来的__autoload函数失效
于是需要在使用spl_autoload_register之前加上这样的判断,

if (function_exists('__autoload')) {
  spl_autoload_register('__autoload');
}

阅读全文>>

if ( !function_exists('json_decode') ){
function json_decode($json)
{
    $comment = false;
    $out = '$x=';
 
    for ($i=0; $i<strlen($json); $i++)
    {
        if (!$comment)
    ...

阅读全文>>

我这种方式是在PHP中生成的,不是直接改html代码的方式,直接改代码的话请自行百度或是用我的方式做好后再在浏览器中查看。

1.将ckfinder放到合适的目录,比如ckeditor下面。

2.修改ckfinder下的config.php中的第33行,将return false;改为 return true;

3.配置ckeditor

一般对于这种常用到的东西,我都会整合成函数

function ckedi...

阅读全文>>

2012-1-30 18:36 Monday  

今天尝试了下面的方法,原来也可以

{$smarty.get.start|default:$smarty.now-7*86400|date_format:"%Y-%m-%d"}

阅读全文>>

convert(text,content)

修改php.ini ,去掉前面的;,将那个4096改大即可。
[MSSQL]
mssql.textlimit   =   4096

//以下度娘

PHP在查询MSSQL数据库的text字段的内容时,如果内容长度过长,则会有部分内容被截取。这也许并不是我们想要的结果,解决办法:

1、修改php.ini文件

打开php.ini文件,查找...

阅读全文>>

升级到smarty3.0后,发现原来的 $smarty->register_function("dealstr","dealstr");已经不能用了,查看了一下手册,发现了如下两种解决方法,以添加函数 dealstr为例:

一、在plugins文件夹下放一个 function.dealstr.php的文件,内容如下

<?php

function smarty_function_deal($param){

extract($param);

//此处省略N个字

}

 

二、直接在一个已引include的文件中将上面定义的函数添加上去即可。

2012-1-30 18:32 Monday  
<?php
/**
 * 很考眼力的验证码
 * @author Aboc QQ:9986584
 */
header("Content-type: image/gif");
session_start();
$im = imagecreate(60, 25);
$bgcolor = imagecolorallocate($im, rand(150, 255),rand(150, 255), rand(150, 255));
imagefill($im, 0, 0, $bgcolor);
$str = "ABCDEFGHIJKLMNPQRSTUVWXYacdefghijkmnpqrstuvwxy3456789";
$strlength = strlen($str)-1;
$s = $str[mt_rand(0, $strlength)].$str[mt_rand(0, $strlength)].$str[mt_rand(0, $strlength)].$str[mt_rand(0, $strlength)];
$t = array();
$t[1] = imagecolorallocate($im, rand(0, 150), rand(0, 150), rand(0, 150));
$t[2] = imagecolorallocate($im, rand(0, 150), rand(0, 150), rand(0, 150));
$t[3] = imagecolorallocate($im, rand(0, 150), rand(0, 150), rand(0, 150));
$t[4] = imagecolorallocate($im, rand(0, 150), rand(0, 150), rand(0, 150));
imagestring($im, 5, rand(0,7), rand(0,8), $s[0], $t[1]);
imagestring($im, 5, rand(13,22), rand(0,8), $s[1], $t[2]);
imagestring($im, 5, rand(28,37), rand(0,8), $s[2], $t[3]);
imagestring($im, 5, rand(43,50), rand(0,8), $s[3], $t[4]);
$c = array();
for ($i=1;$i<=20;$i++){
    $cl = imagecolorallocate($im, rand(220, 255), rand(220, 255), rand(220, 255));
    $x = rand(0,60);
    $y = rand(0,25);
    imageline($im, $x, $y, $x+rand(-3,3), $y+rand(-2,2), $t[1]);
}
$_SESSION['water'] = $s;
unset($s);
unset($t);
unset($cl);
imagegif($im);
imagedestroy($im);

2012-1-30 18:31 Monday  
usleep() 函数延迟代码执行若干微秒。

  unpack() 函数从二进制字符串对数据进行解包。

  uniqid() 函数基于以微秒计的当前时间,生成一个唯一的 ID。

  time_sleep_until() 函数延迟代码执行直到指定的时间。

  PHP5常用函数之time_nanosleep() 函数延迟代码执行若干秒和纳秒。

  sleep() 函数延迟代码执行若干秒。

  show_source() 函数对文件进行语法高亮显示。

  strip_whitespace() 函数返回已删除 PHP 注释以及空白字符的源代码文件。

  pack() 函数把数据装入一个二进制字符串。

  ignore_user_abort() 函数设置与客户机断开是否会终止脚本的执行。

  highlight_string() 函数对字符串进行语法高亮显示。

  highlight_file() 函数对文件进行语法高亮显示。

  PHP5常用函数之get_browser() 函数返回用户浏览器的性能。

  exit() 函数输出一条消息,并退出当前脚本。

  eval() 函数把字符串按照 PHP 代码来计算。

  die() 函数输出一条消息,并退出当前脚本。

  defined() 函数检查某常量是否存在。

  define() 函数定义一个常量。

  constant() 函数返回常量的值。

  PHP5常用函数之connection_status() 函数返回当前的连接状态。

  connection_aborted() 函数检查是否断开客户机。

  zip_read() 函数读取打开的 zip 档案中的下一个文件。

  zip_open() 函数打开 ZIP 文件以供读取。

  zip_entry_read() 函数从打开的 zip 档案项目中获取内容。

  zip_entry_open() 函数打开一个 ZIP 档案项目以供读取。

  PHP5常用函数之zip_entry_name() 函数返回 zip 档案项目的名称。

  zip_entry_filesize() 函数返回 zip 档案项目的原始大小(在压缩之前)。

  zip_entry_compressionmethod() 函数返回 zip 档案项目的压缩方法。

  zip_entry_compressedsize() 函数返回 zip 档案项目的压缩文件尺寸。

  zip_entry_close() 函数关闭由 zip_entry_open() 函数打开的 zip 档案文件。

  zip_close() 函数关闭由 zip_open() 函数打开的 zip 档案文件。

  xml_set_unparsed_entity_decl_handler() 函数规定在遇到无法解析的实体名称(NDATA)声明时被调用的函数。

  xml_set_processing_instruction_handler() 函数规定当解析器在 XML 文档中找到处理指令时所调用的函数。

  xml_set_object() 函数允许在对象中使用 XML 解析器。

  PHP5常用函数之xml_set_notation_decl_handler() 函数规定当解析器在 XML 文档中找到符号声明时被调用的函数。

  xml_set_external_entity_ref_handler() 函数规定当解析器在 XML 文档中找到外部实体时被调用的函数。

  xml_set_element_handler() 函数建立起始和终止元素处理器。

  xml_set_default_handler() 函数为 XML 解析器建立默认的数据处理器。

  xml_set_character_data_handler() 函数建立字符数据处理器。

  xml_parser_set_option() 函数为 XML 解析器进行选项设置。

  xml_parser_get_option() 函数从 XML 解析器获取选项设置信息。

  xml_parser_free() 函数释放 XML 解析器。

  PHP5常用函数之xml_parser_create() 函数创建 XML 解析器。

  xml_parser_create_ns() 函数创建带有命名空间支持的 XML 解析器。

  xml_parse_into_struct() 函数把 XML 数据解析到数组中。

  xml_parse() 函数解析 XML 文档。

  xml_get_error_code() 函数获取 XML 解析器错误代码。

  xml_get_current_line_number() 函数获取 XML 解析器的当前行号。

  xml_get_current_column_number() 函数获取 XML 解析器的当前列号。

  PHP5常用函数之xml_get_current_byte_index() 函数获取 XML 解析器的当前字节索引。

  xml_error_string() 函数获取 XML 解析器的错误描述。

  utf8_encode() 函数把 ISO-8859-1 字符串编码为 UTF-8。

  utf8_decode() 函数把 UTF-8 字符串解码为 ISO-8859-1。

  wordwrap() 函数按照指定长度对字符串进行折行处理。

  vsprintf() 函数把格式化字符串写入变量中。

  vprintf() 函数输出格式化的字符串。

  vfprintf() 函数把格式化的字符串写到指定的输出流。

  PHP5常用函数之ucwords() 函数把字符串中每个单词的首字符转换为大写。

  ucfirst() 函数把字符串中的首字符转换为大写。

  trim() 函数从字符串的两端删除空白字符和其他预定义字符。

  substr_replace() 函数把字符串的一部分替换为另一个字符串。

  substr_count() 函数计算子串在字符串中出现的次数。

  substr_compare() 函数从指定的开始长度比较两个字符串。

  substr() 函数返回字符串的一部分。

  strtr() 函数转换字符串中特定的字符。

  strtoupper() 函数把字符串转换为大写。

  strtolower() 函数把字符串转换为小写。

  PHP5常用函数之strtok() 函数把字符串分割为更小的字符串。

  strstr() 函数搜索一个字符串在另一个字符串中的第一次出现。

  strspn() 函数返回在字符串中包含的特定字符的数目。

  strrpos() 函数查找字符串在另一个字符串中最后一次出现的位置。

  strripos() 函数查找字符串在另一个字符串中最后一次出现的位置。

  strrev() 函数反转字符串。

  strrchr() 函数查找字符串在另一个字符串中最后一次出现的位置,并返回从该位置到字符串结尾的所有字符。

  strpos() 函数返回字符串在另一个字符串中第一次出现的位置。

  PHP5常用函数之strpbrk() 函数在字符串中搜索指定字符中的任意一个。

  strncmp() 函数比较两个字符串。

  strncasecmp() 函数比较两个字符串。

  strnatcmp() 函数使用一种“自然”算法来比较两个字符串。

  strnatcasecmp() 函数使用一种“自然”算法来比较两个字符串。

  strlen() 函数返回字符串的长度。

  stristr() 函数查找字符串在另一个字符串中第一次出现的位置。

  stripos() 函数返回字符串在另一个字符串中第一次出现的位置。

  stripslashes() 函数删除由 addslashes() 函数添加的反斜杠。

  stripcslashes() 函数删除由 addcslashes() 函数添加的反斜杠。

  strip_tags() 函数剥去 HTML、XML 以及 PHP 的标签。

  strcspn() 函数返回在找到任何指定的字符之前,在字符串查找的字符数。

  PHP5常用函数之strcoll() 函数比较两个字符串。

  strcmp() 函数比较两个字符串。

  strchr() 函数搜索一个字符串在另一个字符串中的第一次出现。

  strcasecmp() 函数比较两个字符串。

  str_word_count() 函数计算字符串中的单词数。

  str_split() 函数把字符串分割到数组中。

  str_shuffle() 函数随机地打乱字符串中的所有字符。

  str_rot13() 函数对字符串执行 ROT13 编码。

  str_replace() 函数使用一个字符串替换字符串中的另一些字符。

  str_repeat() 函数把字符串重复指定的次数。

  str_pad() 函数把字符串填充为指定的长度。

  str_ireplace() 函数使用一个字符串替换字符串中的另一些字符。

  PHP5常用函数之sscanf() 函数根据指定的格式解析来自一个字符串的输入。

  sprintf() 函数把格式化的字符串写写入一个变量中。

  soundex() 函数计算字符串的 soundex 键。

  similar_text() 函数计算两个字符串的匹配字符的数目。

  sha1_file() 函数计算文件的 SHA-1 散列。

  sha1() 函数计算字符串的 SHA-1 散列。

  setlocale() 函数设置地区信息(地域信息)。

  PHP5常用函数之rtrim() P rtrim() 函数

来源:http://phpec.com/?action=show&id=33

一直以来,由于php本身的session机制不能跨机,令很多phper感到不爽,现在流行的解决方案主要有:
1)使用数据库来实现
2)自己写server端,通过改写session处理函数来请求
3)使用nfs等跨机存储来保存session
4)使用memcache来保存
5)使用zend platform提供的解决方案

其中的1-4都是通过改用可以跨机的储存机制,再使用session_set_save_handler()来实现,5是zend公司的商业产品(不过据之前在使用的同事反映,效果不太满意),以上的方案,各有利弊,不在本文讨论范围

无论是用memcache,还是db,nfs,其原理是一样的,都是通过session_set_save_handler函数来改变默认的处理方式,通 过指定回调函数来自定义处理,可以参考手册的session_set_save_handler()函数部分,有例子,比较容易明白

以下是一些我在使用memcache来实现时的一些记录:
1)使用类来实现时,各回调函数都定义为静态方法,在类的构造中使用session_set_save_handler注册回调函数, 如:
session_set_save_handler(
                array('memSession', 'open'),
                array('memSession', 'close'),
                array('memSession', 'read'),
                array('memSession', 'write'),
                array('memSession', 'destroy'),
                array('memSession', 'gc')
          );
memSession为类名,要使用session,则先new memSession,再session_start();


2)生存期和垃圾回收
memCache的set命令有生存期,即使用set命令添加值时,可加上lifetime,此时间可以作为session的生存期,用户在此时间内没有 动作,则会失效,但有动作则不会失效(因为每一个脚本结束时,都会执行write和close,此时lifetime就会被更新了),当然,如果使用 cookie传递SID,则控制SESSION生存期可以用:ini_set('session.cookie_lifetime',time)来设定, 这其实是控制cookie的有效时间,如果session赖以生存的cookie消失了,当然session也就活不了,使用 cookie_lifetime来控制的话,无论有无动作,都将在指定的时间后过时

gc是指垃圾回收,在session中是指清理过期的session数据,影响的参数有:
session.gc_maxlifetime 被视为垃圾前的生存期,超过此时间没有动作,数据会被清走
注意的是,gc不是每次启动会话都会被执行,而是由session.gc_probability 和 session.gc_divisor的比率决定的

结论:控制SESSION的生存期有几种方法
一是cookie_lifttime,这种方式无论有无动作,都会在指定时间内销毁
二是在read中根椐保存时间控制,此方法在有动作时时间会一直有效
三设定session.gc_probability 和 session.gc_divisor的比率为1(即每次会话都会启用gc),再设定gc.maxlifetime来指定生存期,此方法也是在用户有动作时时间一直有效

3)回调函数的执行时机
open 在运行session_start()时执行
read 在运行session_start()时执行,因为在session_start时,会去read当前session数据并写入$_SESSION变量
destroy 在运行session_destroy()时执行
close 在脚本执行完成或调用session_write_close() 或 session_destroy()时被执行,即在所有session操作完成后被执行
gc 执行概率由session.gc_probability 和 session.gc_divisor的值决定,时机是在open,read之后,即session_start会相继执行open,read和gc
write 此方法在脚本结束和使用session_write_close()强制提交SESSION数据时执行

结论:
session_start //执行open(启动会话),read(读取session数据至$_SESSION),gc(清理垃圾)
脚本中间所有对$_SESSION的操作均不会调用这些回调函数
session_destroy //执行destroy,销毁当前session(一般是删除相应的记录或文件),相应地,此回调函数销毁的只是session的数据,但此时

var_dump一下$_SESSION变量,仍然有值的,但此值不会在close后被write回去
session_write_close() //执行write和close,保存$_SESSION至存储,如不手工使用此方法,则会在脚本结束时被自动执行

清晰了以上信息,将对你清楚了解SESSION的工作原理有很大的帮助...

4)直接使用memcache作session处理
在我写了一系列的memcache来保存session的代码后,无意中发现,可以直接在php.ini中设定使用memcache作为session处理,而无须另外编码,方法是:
修改php.ini中的以下值
session.save_handler = memcache
session.save_path = 'tcp://host1:11211' #有多个时直接用","分隔即可
如果只想在特定的应用里使用memcache储存session,可以使用ini_set的方法对以上两个参数进行设定

要测试一下是否真正用上了memcache,可以先捕足到使用的PHPSESSID,再作为KEY用memcach去读一下,就清楚了