PHP6取消了get_magic_quotes_gpc函数
把服务器的PHP版本升到6以后,发现系统彻底空白,猜到是PHP程序运行时出问题了,逐步调试了一下,原来get_magic_quotes_gpc函数的问题,也就是下面这段代码的地方:
if (!get_magic_quotes_gpc()) {
$_REQUEST = array_map( 'addslashes', $_REQUEST);
}
把服务器的PHP版本升到6以后,发现系统彻底空白,猜到是PHP程序运行时出问题了,逐步调试了一下,原来get_magic_quotes_gpc函数的问题,也就是下面这段代码的地方:
if (!get_magic_quotes_gpc()) {
$_REQUEST = array_map( 'addslashes', $_REQUEST);
}
1. session在server端(一般是Apache with PHP module)如何存在的?
默认的,php会将session保存在/tmp目录下,文件名为这个样子:sess_01aab840166fd1dc253e3b4a3f0b8381。每一个文件对应了一个session(会话)。
more /tmp/sess_01aab840166fd1dc253e3b4a3f0b8381 username|s:9:”jiangfeng”;admin|s:1:”0″; #变量名|类型:长度:值
删除这里的session文件,就表示对应的session失效了。
使用以下PDO代码进行参数的模糊查找,结果没有返回数据
$db = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD, $pdo_options);
$query = $database->prepare('SELECT * FROM table WHERE name LIKE "%:name%"');
$query->bindValue(':name', $name, PDO::PARAM_STR);
$query->execute();
while ($results = $query->fetch())
{
echo $results['name'];
}
<?php $str = "I'm a \"!"; ?> <input type="text" value="<?=$str?>" />
结果浏览器的文本框里只显示了“I’m a ”,双引号不见了,查看源代码可以发现如下
<input type="text" value="I'm a "!" />
PHP中有两个函数is_numeric和ctype_digit都是检测字符串是否是数字,但也存在一点区别
写了个测试代码测试一下:
用IE打开某个XML文件时提示“无法显示XML页”,具体错误为“文本内容中发现无效字符”。用Notepad打开文件后发现有不完整字符,如下:
于是也就想到写个函数来过滤,具体如下,实验有效
一般XML中如果含有&等字符,可以通过CDATA来过滤,但是含有一些不认识的特殊字符时候就会不起作用,下面是从别人那儿拿来的一个过滤方法,过滤xml中的非法字符:
//XML标准规定的无效字节为:
/*
0×00 – 0×08
0x0b – 0x0c
0x0e – 0x1f
*/
//所以很简单,输出的时候过滤这些字符就万无一失了,下面是PHP的实现。
/* PHP 实现 */
function XmlSafeStr($s)
{
return preg_replace("/[\\x00-\\x08\\x0b-\\x0c\\x0e-\\x1f]/","",$s);
}
原文无法访问http://zongfeng.bloghome.cn/posts/77742.html
p.s. W3C的XML规范中关于字符的定义请参看这里:http://www.w3.org/TR/2004/REC-xml-20040204/#charsets
写PHP代码的时候碰到这样的问题
Fatal error: Cannot redeclare class ….
从字面来看也很好理解,说明是重复定义了类,找了一下自己的代码,是因为存在同名的类导致的,修改了类名就好了。
再记一个网上找到的解决方法,可能在某些场合有用,先记着
if (!class_exists('pageModule')){
require_once(PATH_site.'fileadmin/scripts/class.page.php');
}
平时用Session比较多,很少用到Cookie,这次是为了解决Discuz!自动同步登陆不得不用Cookie。
结果碰到一个问题,setcookie设置了Cookie并没有生效,在浏览器端也没有看到。查了一下,原来是setcookie是通过HTTP请求响应的Header来完成的,需要在请求响应内容输出之前执行(就像其他Header设定一样)。
在php.ini中error_reporting = E_ALL的情况下,输出内容之后再setcookie会弹出以下提示:
Warning: Cannot modify header information – headers already sent by (output started at C:\xampp\htdocs\b.php:2) in … on line …
但因为当时php.ini设置成了error_reporting = E_ALL & ~E_NOTICE,于是没有任何提示,所以开发的时候还是建议设成error_reporting = E_ALL 方便观察到一些异常情况。
附一个setcookie用法实例
获取某个MySQL数据库中所有表的PHP代码如下:
function list_tables($database)
{
$rs = mysql_list_tables($database);
$tables = array();
while ($row = mysql_fetch_row($rs)) {
$tables[] = $row[0];
}
mysql_free_result($rs);
return $tables;
}
但由于mysql_list_tables方法已经过时,运行以上程序时会给出方法过时的提示信息,如下:
Deprecated: Function mysql_list_tables() is deprecated in … on line xxx
近期评论