霜天部落 | 专注PHP研发,研究LAMP高性能架构部署与优化

PHP,MYSQL几个常见问题

register_globals[全局变量]的相关说明
很多入门的朋友被全局变量搞的很糊涂,可以参考以下的说明:

CODE
决定是否将 EGPCS(Environment,GET,POST,Cookie,Server)变量注册为全局变量。例如,如果 register_globals = on,那么 URL http://www.example.com/test.php?id=3 将产生 $id。或者从 $_SERVER[‘DOCUMENT_ROOT’] 得来 $DOCUMENT_ROOT。如果不想用户数据把全局域弄乱的话可以将此选项关闭。自 PHP 4.2.0 开始,本指令默认为 off。推荐使用 PHP 的预定义变量来替代,例如超全局变量:$_ENV,$_GET,$_POST,$_COOKIE 和 $_SERVER。

如果在数字前面强制加0
格式化数字的位数,未满位的加前导0

CODE
<?php
$num = 12;
$var = sprintf(“%09d”, $num);
echo $var;
?>


取得当前脚本的路径
请不要用 $_SERVER[‘PHP_SELF’]取路径,$_SERVER[‘PHP_SELF’]取出来的在某些情况下是错误的.也不要用$_SERVER[‘SERVER_NAME’],$_SERVER[‘SERVER_NAME’]取得的主机名不包含端口号,而且有时候取得的是服务器名,非你的虚拟主机名.
脚本路径:

CODE
<?php
$url = ‘http://’.dirname($_SERVER[‘HTTP_HOST’].$_SERVER[‘SCRIPT_NAME’]).’/’;
?>


地址栏信息:

CODE
<?php
$url = ‘http://’.$_SERVER[‘HTTP_HOST’].$_SERVER[‘REQUEST_URI’];
?>

url传递参数需要这样编码
与 HTML 实体相匹配的变量。像 &amp、&copy 和 &pound 都将被浏览器解析,并使用实际实体替代所期待的变量名。解决办法是使用 &amp; 代替 & 作为分隔符。使用 htmlentities(urlencode($data)) 对你的 URL 进行编码。

CODE
<?php
echo “<a href=’filename.php?par=” . htmlentities(urlencode($parameter)) . “‘>”;
?>


接受页面直接使用,不需要解码.

数据存入MySQL需要注意
入库:

CODE
<?php
$str = addslashes($str);
?>


出库:

CODE
<?php
$str = stripslashes($str);
?>

返回MySQL数据库上一步 INSERT 操作产生的 ID
mysql_insert_id() 返回给定的 link_identifier 中上一步 INSERT 查询中产生的 AUTO_INCREMENT 的 ID 号。如果没有指定 link_identifier,则使用上一个打开的连接。

CODE
<?php
$last_id = mysql_insert_id();
?>

如何解决表单出错返回从填的时候以前填写的东西全部消失
因为使用了session,可以用session_cache_limiter强制数据流从新生效.

CODE
<?php
// session start
session_cache_limiter(“private, must-revalidate”);
session_start();

?>


判断邮件地址是否合法!
判断邮件地址是否合法!

CODE
<?php
if(!preg_match(“/^[a-z0-9-_\.]+@([a-z0-9][a-z0-9-]+\.)+[a-z]{2,4}$/i”,$email)){
echo “<script language=’JavaScript’>”;
echo “alert(‘E-mail Error!’); location.replace(‘javascript:history.back(1)’);”;
echo “</script>”;
exit;
}
?>

数组存储到MySQL数据库
数组存储到mysql中要用serialize() 产生一个可存储的值

CODE
<?php
$array_in = serialize($data);

?>


出库时

CODE
<?php

$array_out = unserialize($data);
?>

如何截取文件扩展名
如上传文件的扩展名等,此扩展名可能是伪造的.想判断文件类型请用mime_content_type()…

CODE
<?php
// 第一种
$extendname = array_pop(explode ( “.”,$filename));

// 第二种
$extendname = end(explode(“.”, $filename));

// 第三种
$file_part  = pathinfo($filename);
$extendname = $file_part[“extension”];
?>

读取配置文件的几个例子
对配置文件的读取,就像一些应用程序的.INI配置文件一样,具体内容查看手册中的函数:

1.

CODE
<?php
define (‘BIRD’, ‘Dodo bird’);

// Parse without sections
$ini_array = parse_ini_file(“sample.ini”);
print_r($ini_array);

// Parse with sections
$ini_array = parse_ini_file(“sample.ini”, TRUE);
print_r($ini_array);

// sample.ini
/*
; This is a sample configuration file
; Comments start with ‘;’, as in php.ini

[first_section]
one = 1
five = 5
animal = BIRD

[second_section]
path = /usr/local/bin
URL = “http://www.example.com/~username”
*/
?>

2.

CODE
<?php
$handle = fopen (“users.txt”,”r”);
while ($userinfo = fscanf ($handle, “%s\t%s\t%s\n”)) {
list ($name, $profession, $countrycode) = $userinfo;
//… do something with the values
}
fclose($handle);

// users.txt
/*
javier  argonaut        pe
hiroshi sculptor        jp
robert  slacker us
luigi   florist it
*/
?>