PHP最新部分常见问题总结

时间:2023.7.19

PHP部分常见问题总结

若有出错地方或者你有更好的想法,请指正。

在提问题前请先仔细查阅PHP手册,MYSQL手册 以及PHPINFO里面的设置

另外希望你读一下PHP编程标准

1:为什么我得不到变量

我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值?

在PHP4.2以后的版本中register_global默认为off

若想取得从另一页面提交的变量:

方法一:在PHP.ini中找到register_global,并把它设置为on.

方法二:在接收网页最前面放上这个

extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).

方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.

2:调试你的程序

在运行时必须知道某个变量为何值。我是这样做的,建立一文件debug.php,其内容如下:

<?PHP

Ob_Start();

Session_Start();

Echo "<pre>";

Echo "本页得到的_GET变量有:";

Print_R($_GET);

Echo "本页得到的_POST变量有:";

Print_R($_POST);

Echo "本页得到的_COOKIE变量有:";

伊图教程网[]

/html/2007-02/1170384144.html

Print_R($_COOKIE);

Echo "本页得到的_SESSION变量有:";

Print_R($_SESSION);

Echo "</pre>";

?>

然后在php.ini中设置:include_path = "c:/php",并将debug.php放在此文件夹,以后就可以在每个网页里包含此文件,查看得到的变量名和值.

3:如何使用session

凡是与session有关的,之前必须调用函数session_start();

为session付值很简单,如:

<?php

Session_start();

$Name = "这是一个Session例子";

Session_Register("Name");//注意,不要写成:Session_Register("$Name"); Echo $_SESSION["Name"];

//之后$_SESSION["Name"]为"这是一个Session例子"

?>

在php4.2之后,可以为session直接付值:

<?PHP

Session_Start();

$_SESSION["name"]="value";

?>

取消session可以这样:

<?php

session_start();

session_unset();

session_destroy();

?>

取消某个session变量在php4.2以上还有BUG.

注意:

1:在调用Session_Start()之前不能有任何输出.例如下面是错误的. ==========================================

1行

2行 <?PHP

3行 Session_Start();//之前在第一行已经有输出

4行 .....

5行 ?>

==========================================

提示1:

凡是出现"........headers already sent..........",就是Session_Start()之前向浏览器输出信息.

去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)

提示2:

如果你的Session_Start()放在循环语句里,并且很难确定之前哪里向浏览器输出信息,可以用下面这种方法:

1行 <?PHP Ob_Start(); ?>

........这里是你的程序......

2:这是什么错误

Warning: session_start(): open(/tmp\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:....

因为你没有指定session文件的存放路径.

解决方法:

(1)在c盘建立文件夹tmp

(2)打开php.ini,找到session.save_path,修改为

session.save_path= "c:/tmp"

伊图教程网[]

/html/2007-02/1170384144-1.html

4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失

<?php

$Var="hello php";//修改为$Var=" hello php";试试得到什么结果 $post= "receive.php?Name=".$Var;

header("location:$post");

?>

receive.php的内容:

<?PHP

Echo "<pre>";

Echo $_GET["Name"];

Echo "</pre>";

?>

正确的方法是:

<?php

$Var="hello php";

$post= "receive.php?Name=".urlencode($Var);

header("location:$post");

?>

在接收页面你不需要使用Urldecode(),变量会自动编码.

5:如何截取指定长度汉字而不会出现以"?>"结尾,超出部分以"..."代替

一般来说,要截取的变量来自Mysql,首先要保证那个字段长度要足够长,一般为char(200),可以保持100个汉字,包括标点.

<?PHP

$str="这个字符好长呀,^_^";

$Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符... Echo "$Short_Str";

Function csubstr($str,$start,$len)

{

$strlen=strlen($str);

$clen=0;

for($i=0;$i<$strlen;$i++,$clen++)

{

if ($clen>=$start+$len)

break;

if(ord(substr($str,$i,1))>0xa0)

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,2);

$i++;

}

else

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,1);

}

}

return $tmpstr;

}

Function showShort($str,$len)

{

$tempstr = csubstr($str,0,$len);

if ($str<>$tempstr)

$tempstr .= "..."; //要以什么结尾,修改这里就可以.

return $tempstr;

}

6:规范你的SQL语句

在表格,字段前面加上"`",这样就不会因为误用关键字而出现错误, 当然我并不推荐你使用关键字.

伊图教程网[]

/html/2007-02/1170384144-2.html

例如

$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

"`"怎么输入? 在TAB键上面.

7:如何使Html/PHP格式的字符串不被解释,而是照原样显示

<?PHP

$str="<h1>PHP</h1>";

Echo "被解释过的: ".$str."<br>经过处理的:";

Echo htmlentities(nl2br($str));

?>

8:怎么在函数里取得函数外的变量值

<?PHP

$a="PHP";

foo();

Function foo()

{

global $a;//删除这里看看是什么结果

Echo "$a";

}

?>

9:我怎么知道系统默认支持什么函数

<?php

$arr = get_defined_functions();

Function php() {

}

echo "<pre>";

Echo "这里显示系统所支持的所有函数,和自定以函数php\n";

print_r($arr);

echo "</pre>";

?>

在提问题前请先仔细查阅PHP手册,MYSQL手册 以及PHPINFO里面的设置。 另外希望你读一下PHP编程标准。(站长书库)

精彩30问,网罗常见PHP问题,希望大家细心查看。

1:为什么我得不到变量

我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值?

在PHP4.2以后的版本中register_global默认为off

若想取得从另一页面提交的变量:

方法一:在PHP.ini中找到register_global,并把它设置为on.

方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).

方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻烦,但比较安全.

2:调试你的程序

在运行时必须知道某个变量为何值。我是这样做的,建立一文件debug.php,其内容如下: <?PHP

Ob_Start();

Session_Start();

Echo "<pre>";

Echo "本页得到的_GET变量有:";

Print_R($_GET);

Echo "本页得到的_POST变量有:";

Print_R($_POST);

Echo "本页得到的_COOKIE变量有:";

Print_R($_COOKIE);

Echo "本页得到的_SESSION变量有:";

Print_R($_SESSION);

Echo "</pre>";

?>

然后在php.ini中设置:include_path = "c:/php",并将debug.php放在此文件夹,

以后就可以在每个网页里包含此文件,查看得到的变量名和值.

3:如何使用session

凡是与session有关的,之前必须调用函数session_start();

为session付值很简单,如

<?php

Session_start();

$Name = "这是一个Session例子";

Session_Register("Name");//注意,不要写成:

Session_Register("$Name");

Echo $_SESSION["Name"];

//之后$_SESSION["Name"]为"这是一个Session例子"

?>

在php4.2之后,可以为session直接付值:

<?PHP

Session_Start();

$_SESSION["name"]="value";

?>

取消session可以这样:

<?php

session_start();

session_unset();

session_destroy();

?>

取消某个session变量在php4.2以上还有BUG.取消某个session变量在php4.2以上还有BUG.

注意:

1:在调用Session_Start()之前不能有任何输出.例如下面是错误的. ==========================================

1行

2行 <?PHP

3行 Session_Start();//之前在第一行已经有输出

4行 .....

5行 ?>

==========================================

提示1:

凡是出现"........headers already sent..........",就是Session_Start()之前向浏览器输出信息.

去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)

提示2:

如果你的Session_Start()放在循环语句里,并且很难确定之前哪里向浏览器输出信息,可以用下面这种方法:

1行 <?PHP Ob_Start(); ?>

........这里是你的程序......

2:这是什么错误

Warning: session_start():

open(/tmp\sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:.... 因为你没有指定session文件的存放路径.

解决方法:

(1)在c盘建立文件夹tmp

(2)打开php.ini,找到session.save_path,修改为session.save_path= "c:/tmp"

4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失 <?php

$Var="hello php";//修改为$Var=" hello php";试试得到什么结果 $post= "receive.php?Name=".$Var;

header("location:$post");

?>

receive.php的内容:

<?PHP

Echo "<pre>";

Echo $_GET["Name"];

Echo "</pre>";

?>

正确的方法是

<?php

$Var="hello php";

$post= "receive.php?Name=".urlencode($Var);

header("location:$post");

?>

在接收页面你不需要使用Urldecode(),变量会自动编码.

5:如何截取指定长度汉字而不会出现以"?>"结尾,超出部分以"..."代替

一般来说,要截取的变量来自Mysql,首先要保证那个字段长度要足够长,一般为char(200),可以保持100个汉字,包括标点. <?PHP

$str="这个字符好长呀,^_^";

$Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符... Echo "$Short_Str";

Function csubstr($str,$start,$len)

{

$strlen=strlen($str);

$clen=0;

for($i=0;$i<$strlen;$i++,$clen++)

{

if ($clen>=$start+$len)

break;

if(ord(substr($str,$i,1))>0xa0)

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,2);

$i++;

}

else

{

if ($clen>=$start)

$tmpstr.=substr($str,$i,1);

}

}

return $tmpstr;

}

Function showShort($str,$len)

{

$tempstr = csubstr($str,0,$len);

if ($str<>$tempstr)

$tempstr .= "..."; //要以什么结尾,修改这里就可以.

return $tempstr;

}

6:规范你的SQL语句

在表格,字段前面加上"`",这样就不会因为误用关键字而出现错误, 当然我并不推荐你使用关键字.

例如

$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

"`"怎么输入? 在TAB键上面

7:如何使Html/PHP格式的字符串不被解释,而是照原样显示 <?PHP

$str="<h1>PHP</h1>";

Echo "被解释过的: ".$str."<br>经过处理的:";

Echo htmlentities(nl2br($str));

?>

8:怎么在函数里取得函数外的变量值 <?PHP

$a="PHP";

foo();

Function foo()

{

global $a;//删除这里看看是什么结果

Echo "$a";

}

?>

9:我怎么知道系统默认支持什么函数 <?php

$arr = get_defined_functions();

Function php() {

}

echo "<pre>";

Echo "这里显示系统所支持的所有函数,和自定以函数php\n"; print_r($arr);

echo "</pre>";

?>

10:如何比较两个日期相差几天

<?PHP

$Date_1="2003-7-15";//也可以是:$Date_1="2003-6-25 23:29:14";

$Date_2="1982-10-1";

$Date_List_1=explode("-",$Date_1);

$Date_List_2=explode("-",$Date_2);

$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]); $d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]); $Days=round(($d1-$d2)/3600/24);

Echo "偶已经奋斗了 $Days 天^_^";

?>

11:为什么我升级PHP后,原来的程序出现满屏的 Notice: Undefined variable:

这是警告的意思,由于变量未定义引起的.

打开php.ini,找到最下面的error_reporting,修改为error_reporting = E_ALL & ~E_NOTICE

对于Parse error错误

error_reporting(0)无法关闭.

如果你想关闭任何错误提示,打开php.ini,找到display_errors,设置为display_errors = Off.以后任何错误都不会提示.

那什么是error_reporting?

12:我想在每个文件最前,最后面都加上一文件.但一个一个添加很麻烦

1:打开php.ini文件

设置 include_path= "c:"

2:写两个文件

auto_prepend_file.php 和 auto_append_file.php 保存在c盘,他们将自动依附在每个php文件的头部和尾部.

3:在php.ini中找到:

Automatically add files before or after any PHP document.

auto_prepend_file = auto_prepend_file.php;依附在头部

auto_append_file = auto_append_file.php;依附在尾部

以后你每个php文件就相当于

<?php

Include "auto_prepend_file.php" ;

.......//这里是你的程序

Include "auto_append_file.php";

?>

13:如何利用PHP上传文件 <html><head>

<title>上载文件表单</title></head>

<body>

<form enctype="multipart/form-data" action="" method="post"> 请选择文件: <br>

<input name="upload_file" type="file"><br>

<input type="submit" value="上传文件">

</form>

</body>

</html>

<?

$upload_file=$_FILES['upload_file']['tmp_name'];

$upload_file_name=$_FILES['upload_file']['name'];

if($upload_file){

$file_size_max = 1000*1000;// 1M限制文件上传最大容量(bytes) $store_dir = "d:/";// 上传文件的储存位置

$accept_overwrite = 1;//是否允许覆盖相同文件

// 检查文件大小

if ($upload_file_size > $file_size_max) {

echo "对不起,你的文件容量大于规定";

exit;

}

// 检查读写文件

if (file_exists($store_dir . $upload_file_name)

&& !$accept_overwrite) {

Echo "存在相同文件名的文件";

exit;

}

//复制文件到指定目录

if

(!move_uploaded_file($upload_file,$store_dir.$upload_file_name)) { echo "复制文件失败";

exit;

}

}

Echo "<p>你上传了文件:";

echo $_FILES['upload_file']['name'];

echo "<br>";

//客户端机器文件的原名称。

Echo "文件的 MIME 类型为:";

echo $_FILES['upload_file']['type'];

//文件的 MIME 类型,需要浏览器提供该信息的支持,例如“image/gif”。 echo "<br>";

Echo "上传文件大小:";

echo $_FILES['upload_file']['size'];

//已上传文件的大小,单位为字节。

echo "<br>";

Echo "文件上传后被临时储存为:";

echo $_FILES['upload_file']['tmp_name'];

//文件被上传后在服务端储存的临时文件名。

echo "<br>";

$Erroe=$_FILES['upload_file']['error'];

switch($Erroe){

case 0:

Echo "上传成功"; break;

case 1:

Echo "上传的文件超过了 php.ini 中

upload_max_filesize 选项限制的值."; break;

case 2:

Echo "上传文件的大小超过了 HTML 表单中

MAX_FILE_SIZE 选项指定的值。"; break;

case 3:

Echo "文件只有部分被上传";break;

case 4:

Echo "没有文件被上传";break;

}

?>

14:如何配置GD库

下面是我的配置过程

1:用dos命令(也可以手动操作,拷贝dlls文件夹里所有dll文件到system32目录下) copy c:\php\dlls\*.dll c:\windows\system32\

2:打开php.ini

设置extension_dir = "c:/php/extensions/";

3:

extension=php_gd2.dll;把extension前面的逗号去掉,如果没有php_gd2.dll,php_gd.dll也一样,保证确实存在这一文件c:/php/extensions/php_gd2.dll 4:运行下面程序进行测试 <?php

Ob_end_flush();

//注意,在此之前不能向浏览器输出任何信息,要注意是否设置了

auto_prepend_file.

header ("Content-type: image/png");

$im = @imagecreate (200, 100)

or die ("无法创建图像");

$background_color = imagecolorallocate ($im, 0,0, 0);

$text_color = imagecolorallocate ($im, 230, 140, 150);

imagestring ($im, 3, 30, 50, "A Simple Text String", $text_color); imagepng ($im);

?>

15:什么是UBB代码

UBB代码是HTML的一个变种,是Ultimate Bulletin Board (国外一个BBS程序,国内也有不少地方使用这个程序)采用的一种特殊的TAG.

即使禁止使用 HTML,你也可以用 UBBCode? 来实现.也许你更希望使用 UBBCode? 而不是 HTML, 即使论坛允许使用 HTML, 因为使用起来代码较少也更安全.

Q3boy的UBB里面付有例子,可以直接运行测试

16:我想修改MySQL的用户,密码

首先要声明一点,大部分情况下,修改MySQL是需要有mysql里的root权限的, 所以一般用户无法更改密码,除非请求管理员.

方法一

使用phpmyadmin,这是最简单的了,修改mysql库的user表, 不过别忘了使用PASSWORD函数。

方法二

使用mysqladmin,这是前面声明的一个特例。

mysqladmin -u root -p password mypasswd

输入这个命令后,需要输入root的原密码,然后root的密码将改为mypasswd。

把命令里的root改为你的用户名,你就可以改你自己的密码了。

当然如果你的mysqladmin连接不上mysql server,或者你没有办法执行mysqladmin,

那么这种方法就是无效的。

而且mysqladmin无法把密码清空。

下面的方法都在mysql提示符下使用,且必须有mysql的root权限: 方法三

mysql> INSERT INTO mysql.user (Host,User,Password)

VALUES('%','jeffrey',PASSWORD('biscuit'));

mysql> FLUSH PRIVILEGES

确切地说这是在增加一个用户,用户名为jeffrey,密码为biscuit。 在《mysql中文参考手册》里有这个例子,所以我也就写出来了。 注意要使用PASSWORD函数,然后还要使用FLUSH PRIVILEGES。

方法四

和方法三一样,只是使用了REPLACE语句

mysql> REPLACE INTO mysql.user (Host,User,Password)

VALUES('%','jeffrey',PASSWORD('biscuit'));

mysql> FLUSH PRIVILEGES

方法五

使用SET PASSWORD语句,

mysql> SET PASSWORD FOR jeffrey@"%" = PASSWORD('biscuit'); 你也必须使用PASSWORD()函数,

但是不需要使用FLUSH PRIVILEGES。

方法六

使用GRANT ... IDENTIFIED BY语句

mysql> GRANT USAGE ON *.* TO jeffrey@"%" IDENTIFIED BY 'biscuit'; 这里PASSWORD()函数是不必要的,也不需要使用FLUSH PRIVILEGES。

注意: PASSWORD() [不是]以在Unix口令加密的同样方法施行口令加密。 17:我想知道他是通过哪个网站连接到本页 <?php

//必须通过超级连接进入才有输出

Echo $_SERVER['HTTP_REFERER'];

?>

18:数据放入数据库和取出来显示在页面需要注意什么

入库时

$str=addslashes($str);

$sql="insert into `tab` (`content`) values('$str')";

出库时

$str=stripslashes($str);

显示时

$str=htmlspecialchars(nl2br($str)) ;

19:如何读取当前地址栏信息 <?php

$s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER

['SCRIPT_NAME']}";

$se='';

foreach ($_GET as $key => $value) {

$se.=$key."=".$value."&";

}

$se=Preg_Replace("/(.*)&$/","$1",$se);

$se?$se="?".$se:"";

echo $s."?$se";

?>

20:我点击后退按钮,为什么之前填写的东西不见 这是因为你使用了session.

解决办法:

<?php

session_cache_limiter('private, must-revalidate');

session_start(); ...........

..........

?>

21:怎么在图片里显示IP地址

<?

Header("Content-type: image/png");

$img = ImageCreate(180,50);

$ip = $_SERVER['REMOTE_ADDR'];

ImageColorTransparent($img,$bgcolor);

$bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景颜色 $shadow = ImageColorAllocate($img, 250,0,0); // 阴影颜色

$textColor = ImageColorAllocate($img, oxff,oxff,oxff); // 字体颜色

ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip); //显示背景

ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$ip); // 显示IP

ImagePng($img);

imagecreatefrompng($img);

ImageDestroy($img);

?>

22:如何取得用户的真实IP <?

function iptype1 () {

if (getenv("HTTP_CLIENT_IP")) {

return getenv("HTTP_CLIENT_IP");

}

else {

return "none";

银杏树

苏州美肤

苏州祛斑

苏州除皱

苏州脱毛 .cn

苏州人才网

南京调查公司

南京调查公司

}

}

function iptype2 () {

if (getenv("HTTP_X_FORWARDED_FOR")) {

return getenv("HTTP_X_FORWARDED_FOR");

}

else {

return "none";

}

}

function iptype3 () {

if (getenv("REMOTE_ADDR")) {

return getenv("REMOTE_ADDR");

}

else {

return "none";

}

}

function ip() {

$ip1 = iptype1();

$ip2 = iptype2();

$ip3 = iptype3();

if (isset($ip1) && $ip1 != "none" && $ip1 != "unknown") {

return $ip1;

}

elseif (isset($ip2) && $ip2 != "none" && $ip2 != "unknown") { return $ip2;

}

elseif (isset($ip3) && $ip3 != "none" && $ip3 != "unknown") { return $ip3;

}

else {

return "none";

}

}

Echo ip();

?>

23:如何从数据库读取三天内的所有记录

首先表格里要有一个DATETIME字段记录时间,

格式为'2003-7-15 16:50:00'

SELECT * FROM `xltxlm` WHERE TO_DAYS(NOW()) - TO_DAYS(`date`) <= 3;

24:如何远程链接Mysql数据库

在增加用户的mysql表里有一个host字段,修改为"%",或者指定允许连接的ip地址,这样,你就可以远程调用了。

$link=mysql_connect("192.168.1.80:3306","root","");

25:用Apache后,主页出现乱码

方法一:

AddDefaultCharset ISO-8859-1 改为 AddDefaultCharset off

方法二:

AddDefaultCharset GB2312

26:为什么单引号,双引号在接受页面变成(\'\")

解决方法:

方法一:在php.ini中设置:magic_quotes_gpc = Off

方法二: $str=stripcslashes($str)

27:怎么让程序一直运行下去,而不是超过30秒就停止

set_time_limit(60)//最长运行时间一分钟

set_time_limit(0)//运行到程序自己结束,或手动停止

28:计算当前在线人数

例子一:用文本实现 <?php

//首先你要有读写文件的权限

//本程序可以直接运行,第一次报错,以后就可以

$online_log = "count.dat"; //保存人数的文件,

$timeout = 30;//30秒内没动作者,认为掉线

$entries = file($online_log);

$temp = array();

for ($i=0;$i<count($entries);$i++) {

$entry = explode(",",trim($entries[$i]));

if (($entry[0] != getenv('REMOTE_ADDR')) && ($entry[1] > time())) {

array_push($temp,$entry[0].",".$entry[1]."\n"); //取出其他浏览者的信息,并去掉超时者,保存进$temp

}

}

array_push($temp,getenv('REMOTE_ADDR').",".(time() +

($timeout))."\n"); //更新浏览者的时间

$users_online = count($temp); //计算在线人数

$entries = implode("",$temp);

//写入文件

$fp = fopen($online_log,"w");

flock($fp,LOCK_EX); //flock() 不能在NFS以及其他的一些网络文件

系统中正常工作

fputs($fp,$entries);

flock($fp,LOCK_UN);

fclose($fp);

echo "当前有".$users_online."人在线";

?>

例子二:

用数据库实现在线用户 uthor: Marco(hkfuk)

ontact: Crazy_Marco@msn.com

st="localhost";//mysql的host

er="root";//mysql的用戶名稱

="";//mysql的密碼

="";//mysql資料庫名稱

date_time="30";//更新的頻率---秒数

sion_start();

!$_SESSION['name'])session_register("name");

#########################################

n=mysql_connect($host,$user,$pw)or die("不可以連接資料庫");

w=time();

ql_select_db($db,$con)or die("錯誤的資料庫$db");

!empty($name)){//如果用戶已經登入了

ery=mysql_query("select count(username) from online_list where username='$name'",$con);//查詢在線到表已經有用戶的名稱

sult=mysql_result($query,0);//查詢的結果

$result!=0){//如果用戶已經在在線列表了

sql_query("update online_list set second_time='$now' where username='$name'",$con);//更新用戶的最後在間

se{//如果用戶已經不在在線列表

sql_query("insert into

ine_list(username,userip,online_time,second_time)values('$name','$REMOTE_ADDR','$now','$now')",$con)增一個用戶到在線列表

e{//如果用戶沒有登入

ery=mysql_query("select count(userip) from online_list where userip='$REMOTE_ADDR'",$con);//查詢在線到否已經有訪客的ip 地址

sult=mysql_result($query,0);//查詢的結果

$result!=0){//如果訪客的ip地址已經在在線列表了

sql_query("update online_list set second_time='$now' where userip='$REMOTE_ADDR'",$con);//更新訪客的最線時間

se{//如果用戶列表沒有訪客的ip地址

sql_query("insert into online_list(username,userip,online_time,second_time)values('訪客

$REMOTE_ADDR','$now','$now')",$con);//新增一個訪客到在線列表

l_time=$now-$update_time;

sql_query("delete from online_list where second_time<$del_time",$con);//刪除在$update_time秒內沒有動用戶

29:什么是模板,怎么用

这里有几篇关于模板的文章

我用的是phplib模板

下面是其中几个函数的使用

$T->Set_File("随便定义","模板文件.tpl");

$T->Set_Block("在set_file中定义的","<!-- 来自模板 -->","随便定义");

$T->Parse("在Set_Block中定义的","<!-- 来自模板 -->",true);

$T->Parse("随便输出结果","在Set_File中定义的");

设置循环格式为:

<!--(多于一个空格) BEGIN $handle(多于一个空格)-->

如何将模板生成静态网页

<?php

//这里使用phplib模板

............

............

$tpl->parse("output","html");

$output = $tpl->get("output");// $output 为整个网页内容

function wfile($file,$content,$mode='w') {

$oldmask = umask(0);

$fp = fopen($file, $mode);

if (!$fp) return false;

fwrite($fp,$content);

fclose($fp);

umask($oldmask);

return true;

} // 写到文件里

Wfile($FILE,$output);

header("location:$FILE");//重定向到生成的网页

}

?>

30:怎么用php解释字符

比如:输入2+2*(1+2),自动输出8

可以用eval函数

<form method=post action="">

<input type="text" name="str"><input type="submit"> </form>

<?php

$str=$_POST['str'];

eval("\$o=$str;");

Echo "$o";

?>

另外,用此函数必须特别小心!!

如果有人输入format: d:会是什么结果?

PHP常见问题总结

【1】页面之间无法传递变量 get,post,session在最新的php版本中自动全局变量是关闭的,所以要从上一页面取得提交过来得变量要使用

$_GET['foo'],$_POST['foo'],$_SESSION['foo']来得到

当然也可以修改自动全局变量为开(php.ini改为register_globals = On);考虑到兼容性,还是强迫自己熟悉新的写法比较好。

【2】Win32下apache2 用get方法传递中文参数会出错

test.php?a=你好&b=你也好

传递参数是会导致一个内部错误

解决办法:"test.php?a=".urlencode(你好)."&b=".urlencode(你也好) .............MB7-231

【3】win32下的session不能正常工作

php.ini默认的session.save_path = /tmp

这显然是linux下的配置,win32下php无法读写session文件导致session无法使用

把它改成一个绝对路径就可以了,例如session.save_path = c:windows emp

【4】显示错误信息

当php.ini的display_errors = On并且error_reporting = E_ALL时,将显示所有的错误和提示,调试的时候最好打开以便纠错,如果你用以前php写法错误信息多半是关于未定义变量的。变量在赋值以前调用会有提示,解决办法是探测或者屏蔽

例如显示$foo,可以if(isset($foo)) echo $foo 或者echo @$foo

【5】Win32下mail()不能发送电子邮件

在linux下配置好的sendmail可以发送,在win32下需要调用smtp服务器来发送电子邮件

修改php.ini的SMTP = ip //ip是不带验证功能的smtp服务器(网上很难找到) php发送邮件的最好解决方法是用socket直接发送到对方email服务器而不用转发服务器

【6】初装的mysql如果没有设置密码,应该使用

update mysql.user set password="yourpassword" where user="root" 修改密码 MB7-224

【7】header already sent

这个错误通常会在你使用HEADER的时候出现,他可能是几种原因:1,你在使用HEADER前PRING或者ECHO了2.你当前文件前面有空行3.你可能INCLUDE了一个文件,该文件尾部有空行或者输出也会出现这种错误。!

【8】更改php.ini后没有变化

重新启动web server,比如IIS,Apache等等,然后才会应用最新的设置

【9】php在2003上面安装(ISAPI的安装方法恳请高手指教)

PHP4的php4isapi.dll好像和2003有些冲突,只能用CGI模式安装 步骤一,先下在一个安装程序,我是装的是:

php-4.2.3-installer.exe,你也可以去找最新的版本,在安装

php-4.2.3-installer.exe之前保证你的IIS6.0启动了,并能够访问。 安装好以后,在默认网站-->应用程序配置

步骤二:点击 web服务扩展 -->新建web服务扩展.

步骤三: 扩展名-->php,然后添加

步骤四:找到php.exe的路径添加上去。

步骤五: 确定就可以了!

步骤六: 选择php的服务扩展,然后点击允许。

【10】

有时候sql语句不起作用,对数据库操作失败

最简便的调试方法,echo那句sql,看看变量的值能得到不

【11】include和require的区别

两者没有太大的区别,如果要包含的文件不存在,include提示notice,然后继续执行下面的语句,require提示致命错误并且退出

据我测试,win32平台下它们都是先包含后执行,所以被包含文件里最好不要再有include或require语句,这样会造成目录混乱。或许*nux下情况不同,暂时还没测试

如果一个文件不想被包含多次可以使用include_once或require_once## 读取,写入文档数据

function r($file_name) {

$filenum=@fopen($file_name,"r");

@flock($filenum,LOCK_SH);

$file_data=@fread($filenum,filesize($file_name));

@fclose($filenum);

return $file_data;

}

function w($file_name,$data,$method="w"){

$filenum=@fopen($file_name,$method);

flock($filenum,LOCK_EX);

$file_data=fwrite($filenum,$data);

fclose($filenum);

return $file_data;

}

【12】isset()和empty()的区别

两者都是测试变量用的

但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空

如果一个变量没被赋值就引用在php里是被允许的,但会有notice提示

如果一个变量被赋空值,$foo=""或者$foo=0或者 $foo=false,那么empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。 要注销一个变量,可以用 unset($foo)或者$foo=NULL

【13】mysql查询语句包含有关键字

php查询mysql的时候,有时候mysql表名或者列名会有关键字

这时候查询会有错误。例如表名是order,查询时候会出错

简单的办法是sql语句里表名或者列名加上`[tab键上面]来加以区别 例如select * from `order`

【14】通过HTTP协议一次上传多个文件的方法

有两个思路,是同一个方法的两种实现。具体程序还需自己去设计 1,在form中设置多个文件输入框,用数组命名他们的名字,如下: <form action="" method=post>

<input type=file name=usefile[]>

<input type=file name=usefile[]>

<input type=file name=usefile[]>

</form>

这样,在服务器端做以下测试

echo "<pre>";

print_r($_FILES);

echo "</pre>";

1,在form中设置多个文件输入框,但名字不同,如下:

<form action="" method=post>

<input type=file name=usefile_a>

<input type=file name=usefile_b>

<input type=file name=usefile_c>

</form>

在服务器端做同样测试:

echo "<pre>";

print_r($_FILES);

echo "</pre>";

PHP常见问题总结(不断更新)

作者:Hmily 日期:2009-05-20

字体大小: 小 中 大

1、得不到变量?

问:我在一网页向另一网页POST数据name,为什么输出$name时却得不到任何值?

回答:在PHP4.2以后的版本中register_global默认为off,若想取得从另一页面提交的变量:

方法一:在PHP.ini中找到register_global,并把它设置为on.

方法二:在接收网页最前面放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()).

方法三:一个一个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种方法虽然麻

烦,但比较安全.

2、调试你的程序

在运行时必须知道某个变量为何值。我是这样做的,建立一文件debug.php,其内容如下:

PHP代码

1. Ob_Start();

2. Session_Start();

3. Echo "<pre>";

4.

5. Echo "本页得到的_GET变量有:";

6. Print_R($_GET);

7.

8. Echo "本页得到的_POST变量有:";

9. Print_R($_POST);

10.

11. Echo "本页得到的_COOKIE变量有:";

12. Print_R($_COOKIE);

13.

14. Echo "本页得到的_SESSION变量有:";

15. Print_R($_SESSION);

16. Echo "</pre>";

3、如何开启和使用Session?

凡是与session有关的,之前必须调用函数session_start();

为session付值很简单,如:

PHP代码

1. Session_start();

2. $Name = "这是一个Session例子";

3. Session_Register("Name");//注意,不要写成:Session_Register("$Name");

4. Echo $_SESSION["Name"];

5. //之后$_SESSION["Name"]为"这是一个Session例子"

在php4.2之后,可以为session直接付值:

PHP代码

1. Session_Start();

2. $_SESSION["name"]="value";

取消session可以这样:

PHP代码

1. session_start();

2. session_unset();

3. session_destroy();

注意:在调用Session_Start()之前不能有任何输出.例如下面是错误的. PHP代码

1. 1行

2. 2行

3. 3行 Session_Start();//之前在第一行已经有输出

4. 4行 .....

5. 5行

提示1:

凡是出现"........headers already sent..........",就是Session_Start()之前向浏览器输出信息.

去掉输出就正常,(COOKIE也会出现这种错误,错误原因一样)

4:为什么我向另一网页传送变量时,只得到前半部分,以空格开头的则全部丢失,

发送页面:

PHP代码

1. $Var="hello php";//修改为$Var=" hello php";试试得到什么结果

2. $post= "receive.php?Name=".$Var;

3. header("location:$post");

receive.php的内容:

PHP代码

1. Echo "<pre>";

2. Echo $_GET["Name"];

3. Echo "</pre>";

正确的方法是:

PHP代码

1. $Var="hello php";

2. $post= "receive.php?Name=".urlencode($Var);

3. header("location:$post");

说明:在接收页面你不需要使用Urldecode(),变量会自动编码.

5:如何截取指定长度汉字而不会出现以"[/php]"结尾,超出部分以"..."代替 一般来说,要截取的变量来自Mysql,首先要保证那个字段长度要足够长,一般为char(200),可以保持100个汉字,包括标点.

1. $str="这个字符好长呀,^_^";

2. $Short_Str=showShort($str,4);//截取前面4个汉字,结果为:这个字符...

3. Echo "$Short_Str";

4. Function csubstr($str,$start,$len)

5. {

6. $strlen=strlen($str);

7. $clen=0;

8. for($i=0;$i<$strlen;$i++,$clen++)

9. {

10. if ($clen>=$start+$len)

11. break;

12. if(ord(substr($str,$i,1))>0xa0)

13. {

14. if ($clen>=$start)

15. $tmpstr.=substr($str,$i,2);

16. $i++;

17. }

18. else

19. {

20. if ($clen>=$start)

21. $tmpstr.=substr($str,$i,1);

22. }

23. }

24.

25. return $tmpstr;

26. }

27. Function showShort($str,$len)

28. {

29. $tempstr = csubstr($str,0,$len);

30. if ($str<>$tempstr)

31. $tempstr .= "..."; //要以什么结尾,修改这里就可以.

32.

33. return $tempstr;

34. }

6:规范你的SQL语句

在表格,字段前面加上"`",这样就不会因为误用关键字而出现错误, 当然我并不推荐你使用关键字.

PHP代码

1. //例如

2. $Sql="Insert INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'u

se`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')"

3.

4. //"`"怎么输入? 在TAB键上面.

7、单引号 双引号什么区别?分别什么时侯用

单引号中,任何变量($var)、特殊转义字符(如“\t \r \n”等)不会被解析,因此PHP的解析速度更快,转义字符仅仅支持“\’”和“\”这样对单引号和反斜杠本身的转义;双引号中,变量($var)值会代 入字符串中,特殊转义字符也会被解析成特定的单个字符,还有一些专门针对上述两项特性的特殊功能性转义,例如“$”和“。这样虽然程序编写更加方便,但同 时PHP的解析也很慢;数组中,如果下标不是整型,而是字符串类型,请务必用单引号将下标括起,正确的写法为$array[‘key’],而不 是$array[key],因为不正确的写法会使PHP解析器认为key是一个常量,进而先判断常量是否存在,不存在时才以“key”作为下标带入表达式 中,同时出发错误事件,产生一条Notice级错误。因此,在绝大多数可以使用单引号的场合,不要使用双引号。

8、isset()和empty()的区别

两者都是测试变量用的。但是isset()是测试变量是否被赋值,而empty()是测试一个已经被赋值的变量是否为空。如果一个变量没被赋值 就引用在php里是被允许的,但会有notice提示。如果一个变量被赋空值,$foo=""或者$foo=0或者$foo=false,那么 empty($foo)返回真,isset($foo)也返回真,就是说赋空值不会注销一个变量。要注销一个变量,可以用 unset($foo)或者$foo=NULL。

9、print,echo,print_r什么区别?分别什么时侯用?

echo和print都可以做输出,不同的是,echo不是函数,没有返回值,而print是一个函数有返回值,所以相对而言如果只是输出 echo 会更快,而print_r通常用于打印变量的相关信息,通常在调试中使用

10、在PHP中有些时候需要打开一些远程的文件(函数为:fopen

(http://XXX.com/a.php),fsockopen(http://XXX.com/a.php) ,

file_get_contents(http://XXX.com/a.php)等。。。),环境为php5,

apache2.2.X,会提示你无法打开文件流,http请求失败(failed to open stream: HTTP request failed!)

在php.ini中,有这样两个选项:allow_url_fopen =on(表示可以通过url打开远程文件),user_agent="PHP"(表示通过哪种脚本访问网络,默认前面有个 " ; " 去掉即可。)重启服务器。

11、mysql_fetch_row()和mysql_fetch_array()的区别

mysql_fetch_array() 是 mysql_fetch_row() 的扩展版本。除了将数据以数字索引方式储存在数组中之外,还可以将数据作为关联索引储存,用字段名作为键名。用 mysql_fetch_array() 并不明显 比用 mysql_fetch_row() 慢,而且还提供了明显更多的值。

mysql_fetch_array() 中可选的第二个参数 result_type 是一个常量,可以接受以下值:MYSQL_ASSOC,MYSQL_NUM 和MYSQL_BOTH。本特性是 PHP 3.0.7 起新加的。本参数的默认值是 MYSQL_BOTH。

12、require和require_once有啥区别?

require重复调用会多次加载你饮用的文件;require_once只加载一次,而不管你实际上调用了多少次,主要用于复杂的文件包含关系,例如b包含a,c包含a,但同时c又包含了b,那么如果用require的话可能会导致两次加载a

13、三个IP地址的获取有什么区别?

PHP代码

1. $_SERVER['REMOTE_ADDR'];

2. $_SERVER['HTTP_CLIENT_IP'];

3. $_SERVER['HTTP_X_FORWARDED_FOR'];

4.

5.

6.

7. //区别: $_SERVER['REMOTE_ADDR']; //访问端(有可能是用户,有可能是代理的)IP $_SERVER['HTTP_CLIENT_IP']; //代理端的(有可能存在,可伪造)

8. $_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能

存在,也可以伪造)

9.

14、PHP中的串行化变量和序列化对象

在PHP中有多串行化处理的函数:serialize(),该函数把任何变量值(除了资源变量)转化为字符串的形式,可以把字符串保存到文件里,或者注册为Session,乃至于使用curl来模拟GET/POST来传输变量,达到RPC的效果。 下面文章里介绍的很详细,大家还是看原创吧。

From:/viewthre ... =%D0%F2%C1%D0%BB%AF

15、=>与 ->的区别

=>是关联数组操作符

->是访问对象成员的操作符.

16、Mysql和网页显示乱码解决办法

做到数据库编码,网页编码及表的编码一致,下面是 一条尸体 为大家写的一个教程,简洁明了

From:/thread-41876-1-1.html

17、如何使Html代码在PHP格式的字符串不被解释,而是照原样显示 PHP代码

1. $str="<h1>PHP</h1>";

2. Echo htmlentities(nl2br($str));

18、怎么在函数里取得函数外的变量值

PHP代码

1.

2.

3.

4.

5. $a="PHP"; foo(); Function foo() { global $a;//删除这里看看是什么结果

6. Echo "$a";

7. }

19、如何比较两个日期相差几天

PHP代码

1. $Date_1="2003-7-15";//也可以是:$Date_1="2003-6-25 23:29:14";

2. $Date_2="1982-10-1";

3. $Date_List_1=explode("-",$Date_1);

4. $Date_List_2=explode("-",$Date_2);

5. $d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]);

6. $d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]);

7. $Days=round(($d1-$d2)/3600/24);

8. Echo "偶已经奋斗了 $Days 天^_^";

20、数据放入数据库和取出来显示在页面需要注意什么

PHP代码

1. //最基本的安全措施:

2. //入库

3. $str=addslashes($str);

4. $sql="insert into `tab` (`content`) values('$str')";

5. //出库时

6. $str=stripslashes($str);

7. //显示时

8. $str=htmlspecialchars(nl2br($str)) ;

21、怎么在图片里显示IP地址

PHP代码

1. Header("Content-type: image/png");

2. $img = ImageCreate(180,50);

3.

4.

5.

6.

7.

8. $ip = $_SERVER['REMOTE_ADDR']; ImageColorTransparent($img,$bgcolor); $bgColor = ImageColorAllocate($img, 0x2c,0x6D,0xAF); // 背景颜色 $shadow = ImageColorAllocate($img, 250,0,0); // 阴影颜色 $textColor = ImageColorAllocate($img, oxff,oxff,oxff); // 字体颜色 ImageTTFText($img,10,0,78,30,$shadow,"d:/windows/fonts/Tahoma.ttf",$ip); //显示背

9. ImageTTFText($img,10,0,25,28,$textColor,"d:/windows/fonts/Tahoma.ttf","your ip is".$i

p); // 显示IP

10. ImagePng($img);

11. imagecreatefrompng($img);

12. ImageDestroy($img);

更多相关推荐:
ivpn稽核问题总结

重庆的在跨省业务稽核方面的主要问题和困难是:业务变更或者接口升级,稽核程序发生变更,由于程序员的疏忽以及内部测试不完善,导致程序出现bug,上传的稽核数据出现错误。今年x月份的业务规则变更,8月份的重庆CRM2…

初中化学除杂问题总结

初中化学常见物质的除杂总结概念理解首先明白物质除杂是干什么,物质除杂又叫物质提纯,即把混合物中少量的杂质出去,得到较纯净物质的过程。一、除杂原则简单概括为:不增,不减,易分,最佳。(1)不增:提纯过程中不能引入…

初中化学除杂问题总结

初中化学常见物质的除杂总结一、概念理解首先明白物质除杂是干什么,物质除杂又叫物质提纯,即把混合物中少量的杂质出去,得到较纯净物质的过程。二、除杂原则简单概括为:不增,不减,易分。(1)不增:提纯过程中不能引入新…

查摆问题总结

榆林市特殊教育学校干部作风整顿活动第二阶段查摆问题阶段总结我校干部作风整顿活动自第二阶段(即查摆问题阶段)以来,学校领导班子进一步端正思想,提高认识,按照区教育局的统一部署,结合学校实际,狠抓查摆各项工作的落实…

消防演习存在问题总结

XX作业区消防演习存在问题总结X月X日,作业区联合XX消防支队进行了一次消防演习,通过演习提高了员工消防实战水平,取得了一定效果。但是在演习过程中也暴露了一些问题,反映出作业区员工的消防知识及意识上还存有不足,…

初中英语八大时态问题总结

初中英语时态问题总结一、一般现在时??1、概念:经常、反复发生的动作或行为及现在的某种状况。??2、时间状语:Always,usually,often,sometimes,everyweek(day,year,…

食品安全问题 新闻+各种问题总结

一、新闻链接:20xx年第一季度,广东省广州市质监局对白云区9家沙河粉生产企业15批次的沙河粉进行了抽检,有6家企业10个批次产品合格,合格率为67%。其中,黄石信通粉厂在2次抽检中因二氧化硫残留量超标,产品均…

变轨问题总结

人造卫星变轨问题专题一人造卫星基本原理绕地球做匀速圆周运动的人造卫星所需向心力由万有引力提供轨道半径r确定后与之对应的卫星线速度vGMr周期T2r3GM向心加速度aGMr2也都是确定的如果卫星的质量也确定那么与...

常见问题解答(汇总)

常见问题解答汇总第一部分拟挂牌公司篇1企业申请挂牌的条件有哪些国务院关于全国中小企业股份转让系统有关问题的决定国发20xx49号以下简称国务院决定指出境内符合条件的股份公司均可通过主办券商申请在全国股份转让系统...

N20xx常见问题总结

N20xx常见问题及解答1工作时经常死机1电脑感染病毒请用杀毒软件杀毒确认计算机无病毒后重新安装色谱工作站2内存不足增加内存或删除部分其他软件2工作时发现色谱工作站无法采样按下摇控制开关分析时无信号1检查计算机...

无线常见问题总结

无线常见问题问题1为什么有收到无线信号但就是连接不上或者会自动断开无线连接或连接上延迟太高1查看无线信号强度在电脑上安装无线测试软件如WiFiInspector测试搜索到的无线信号强度一般低于70dbM就意味着...

华为常见问题总结

面试要点积极主动给自己多争取机会群面1自我介绍兴趣爱好优缺点注意会让某位同学说说其他任一位同学都有哪些兴趣爱好或者优点在介绍时做详细记录2小组讨论排序3小组辩论随便神侃呗说话保证流畅逻辑清晰对方对我的表述进行攻...

问题总结(505篇)