现在的位置: 首页 > 综合 > 正文

PHP基础相关

2013年10月25日 ⁄ 综合 ⁄ 共 5047字 ⁄ 字号 评论关闭

表单出错返回从填的时候以前填写的东西全部

 当使用session后会出现这种情况,我们可以使用session_cache_limiter();强制生效.
 PLAIN TEXT
 PHP: 
 <?php 
 session_cache_limiter("private, must-revalidate");
 session_start();
 ...
 ?>

[编辑]PHP中不太常用的方法

在php中,有一些方法经常被人们所遗忘,在一些特定的需求下,他们还是非常有用的。

返回当前class的所有方法1 get_class_methods()

返回当前页所有加载的文件1 get_included_files()

返回当前页所有class1 get_declared_classes()

返回所有的接口1 get_declared_interfaces()

返回所有的function1 get_defined_functions()

返回当前页所有的变量1 get_defined_vars()

返回当前用户1 get_current_user()

返回所有常量1 get_defined_constants()

获取PHP当前加载的所有扩展1 get_loaded_extensions()

获取指定扩展的所有方法列表1 get_extension_funcs('xml')

[编辑]正则匹配中文范围

[\u4e00-\u9fa5]+

[编辑]更改apache默认路径要注意的问题

<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
</Directory>
将Deny改为Allow即可,即修改为如下:
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
重启apache即可

[编辑]PHP
追踪此函数被哪些 function 呼叫来使用过

<?php
function get_backtrace()
{
    $history = debug_backtrace();
    $msg = ;
    foreach ($history as $i => $line) {
        $msg .= "#$i {$line['function']}() called at [{$line['file']}:{$line['line']}]\n" ;
     }
    return $msg;
}
?>
现在发现有更简单的 debug_print_backtrace()可以用, 连之前的 function 都不用写了~
<?php
function a() {
    b();
}
function b() {
    c();
}
function c(){
    debug_print_backtrace();                                                                                                
    // print_r(get_backtrace()); // 要用这个记得把上面的 function 加进来.
}
a();
?>
debug_print_backtrace() 的结果
# #0  c() called at [/tmp/a.php:7]
# #1  b() called at [/tmp/a.php:3]
# #2  a() called at [/tmp/a.php:15]
get_backtrace() 的结果
    * #0 get_backtrace() called at [/tmp/a.php:12]
    * #1 c() called at [/tmp/a.php:7]
    * #2 b() called at [/tmp/a.php:3]
    * #3 a() called at [/tmp/a.php:15]

[编辑]php中
被遗忘的函数

ctype_alnum -- Check for alphanumeric character(s)

检测是否是只包含[A-Za-z0-9]

ctype_alpha -- Check for alphabetic character(s)

检测是否是只包含[A-Za-z]

ctype_cntrl -- Check for control character(s)

检查是否是只包含类是“\r\b\t”之类的字符控制字符

ctype_digit -- Check for numeric character(s)

检查时候是只包含数字字符的字符串(0-9)

ctype_graph -- Check for any printable character(s) except space

检查是否是只包含有可以打印出来的字符(除了空格)的字符串

ctype_lower -- Check for lowercase character(s)

检查是否所有的字符都是英文字母,并且都是小写的

ctype_print -- Check for printable character(s)

检查是否是只包含有可以打印出来的字符的字符串

ctype_punct -- Check for any printable character which is not whitespace or an alphanumeric character

检查是否是只包含非数字/字符/空格的可打印出来的字符

ctype_space -- Check for whitespace character(s)

检查是否是只包含类是“\r\b\t”之类的字符和空格

ctype_upper -- Check for uppercase character(s)

检查是否所有的字符都是英文字母,并且都是大写的

ctype_xdigit -- Check for character(s) representing a hexadecimal digit

检查是否是16进制的字符串,只能包括“0123456789abcdef”

[编辑]cli模式要注意接受参数的方法

       //控制台命令行执行时,转换命令行参数-----------------------
       if (empty($_SERVER["REQUEST_URI"]) && $_SERVER["argc"]>=1)
       {       //is command line to run this phpfile
               $argv = $_SERVER["argv"][1];
               parse_str($argv, $_REQUEST);
               parse_str($argv, $_GET);
               define("CRLF", "\r\n");
       }
       else
       {
               //is web(ie/netscape/firefox) to run this phpfile
               define("CRLF", "< BR >\r\n");
       }

如果在cli模式下不加上面这段的话 不好意思 你接受不到参数 cli模式和http模式下接受参数是不相同的

[编辑]通过PHP调用RTX接口,发送消息

一、原理:通过GET或者POST方式将需要发送的消息和RTX用户帐号,传给RTX提供的cgi接口。


二、详细方法:

方法:GET/POST URL:/sendnotify.cgi 用法举例(IE地址栏中输入): http://127.0.0.1:8012/sendnotify.cgi?msg=hello&receiver=wwjs

参数表:

receiver:接收者,用户昵称,多个接收者以“,”隔开。

msg:消息内容 ,如需要发隐式链接,格式如: [明朝网络|http://www.mingchao.com]

title:消息提醒的标题。

delaytime:消息提醒框的停留时间(毫秒),0表示不自动消失。

okurl:成功后IE自动定位到指定的url 格式类似为:okurl=www.mingchao.com或者okurl=http://www.mingchao.com 注意:这里的url必须为绝对地址。

errurl:失败后IE自动定位到指定的url。


功能二:获取用户状态

1.调用方式:http://127.0.0.1:8012/getstatus.php?username=yangbin

2.参数说明: username 需要获取哪个用户的状态


功能三:给某个组群发RTX广播消息

1.调用方式:http://127.0.0.1:8012/sendnotifybydepart.php?receiverdepart=运维开发组&msg=吃饭了&title=通知&online=1&delaytime=10000

2.参数说明: receiverdepart 需要给那个部门发送消息,该部门即在RTX中看到的组织架构中的部门名

msg   消息内容 ,如需要发隐式链接,格式如: [明朝|http://www.mingchao.com]

title 消息提醒的标题。 【可省略】

online 是否只发在线用户,默认只发给在线用户。 【可省略】

delaytime 消息提醒框的停留时间(毫秒),0表示不自动消失,默认为0。 【可省略】

okurl 成功后IE自动定位到指定的url 格式类似为:okurl=rtx.tencent.com 或者okurl=http://tx.tencent.com 注意:这里的url必须为绝对地址。 【可省略】

errurl   失败后IE自动定位到指定的url。【可省略】


功能四:给某个群群发RTX广播消息

1.调用方式:http://127.0.0.1:8012/sendnotifybygroup.php?receivergroup=M4开发群&msg=吃饭了&title=通知&online=1&delaytime=10000

2.参数说明: receivergroup 需要给那个群发送广播消息,即RTX群

msg   消息内容 ,如需要发隐式链接,格式如: [明朝|http://www.mingchao.com]

title 消息提醒的标题。 【可省略】

online 是否只发在线用户,默认只发给在线用户。 【可省略】

delaytime 消息提醒框的停留时间(毫秒),0表示不自动消失,默认为0。 【可省略】

okurl 成功后IE自动定位到指定的url 格式类似为:okurl=rtx.tencent.com 或者okurl=http://tx.tencent.com 注意:这里的url必须为绝对地址。 【可省略】

errurl   失败后IE自动定位到指定的url。【可省略】


三、注意事项

(1)参数msg中如果包含中文那么需要将msg的编码方式转换成GBK或者GB2312,msg是不支持UTF-8编码方式的。

(2)参数msg如需要加入超链接格式为:[点我跳转|http://www.mingchao.com]

(3)参数msg中不能出现空格,如果需要空格可用【+】替代。

(4)如果请求的url中包含特殊字符,那么需要使用urlencode(),来对url进行编码,否则可能导致超链接显示不正常。

(5)发送消息是需要权限的,这个需要在RTX服务端配置才能发送消息。


四、建议

(1)对msg进行转码的时候用GBK不要用GB2312,因为GB2312支持的汉字比较少,很多比较偏的汉字会无法显示,导致消息被中断(即用户只能收到这个中断前的字符)。

(2)在对消息进行转码的时候,可以考虑加入参数IGNORE,即$msg=iconv("utf-8","gb2312//IGNORE",$msg)这样在转码的时候将会忽略错误字符。会将错误字符后面的继续转码。

(3)在RTXServer服务端的WebRoot目录下放着很多的cgi和php文件。这些文件都是可以用HTTP方式来访问的,你也可以自己编写新的cgi或者php文件,然后将其放到改目录下即可。这样将可能提供非常强大的扩展功能。

[编辑]Highcharts图表在某些浏览器下无法显示

问题分析:导致这个问题的原因是在foreach或者section循环输出数据的时候,最后一条记录有一个逗号没有去掉,所以导致图表无法显示

解决办法:通过smarty自带的变量last来处理:{$smarty.foreach.foreachname.varname}或者{$smarty.section.sectionname.varname}

foreachname:foreach或者smarty指定的name名字 varname:需要访问的变量名字

那么通过上面的方法,我们可以这样解决问题:

   <{foreach name=datetime key=index item=value from=$rs}>
       <{if $smarty.foreach.datetime.last}>
           '<{$index}>'
       <{else}>
           '<{$index}>',
       <{/if}>
   <{/foreach}>

抱歉!评论已关闭.