Php部分常见问题总结
Php部分常见问题总结 Q`J( IdF
若有出错地⽅或者你有更好的想法,欢迎跟贴. E[>}qN{L!
在提问题前请先仔细查阅PHP⼿册,MYSQL⼿册 以及PHPINFO⾥⾯的设置 "}^rW;!e
另外希望你读⼀下PHP编程标准 +!a-K b
PHP⼿册下载地址 w[#tae DG
1:为什么我得不到变量 jc5AsS:/
我在⼀⽹页向另⼀⽹页POST数据name,为什么输出$name时却得不到任何值? Lzy/}k
在PHP4.2以后的版本中register_global默认为off @%zir_Iu
若想取得从另⼀页⾯提交的变量: !jU^u&
⽅法⼀:在PHP.ini中到register_global,并把它设置为on. a':Z.ludd
⽅法⼆:在接收⽹页最前⾯放上这个extract($_POST);extract($_GET);(注意extract($_SESSION)前必须要有Session_Start()). [caCw(7T ⽅法三:⼀个⼀个读取变量$a=$_GET["a"];$b=$_POST["b"]等,这种⽅法虽然⿇烦,但⽐较安全. i1JH f P"
2:调试你的程序 SuY^Tjx`
在运⾏时必须知道某个变量为何值。我是这样做的,建⽴⼀⽂件debug.php,其内容如下: ..v6S <D
CODE: S;EFT2zH
[Copy to clipboard] [d93Rlb
<?PHP (;v,lC_o
Ob_Start(); A7#K
Session_Start(); ?^<85+"
Echo "<pre>"; o*sI$w4JC
Echo "本页得到的_GET变量有:"; 4A694R
Print_R($_GET); =<,hJdB,
Echo "本页得到的_POST变量有:"; )+$a0:
Print_R($_POST); f+FOaR6Pm
Echo "本页得到的_COOKIE变量有:"; Oo_R3JH
Print_R($_COOKIE); 3#n/F!<,H
Echo "本页得到的_SESSION变量有:"; IL^#0m+>
Print_R($_SESSION); {ukORX(
Echo "</pre>"; K#+YH_35
> ( pA5"q#
然后在php.ini中设置:include_path = "c:/php",并将debug.php放在此⽂件夹, /B>�d"Z>v*
以后就可以在每个⽹页⾥包含此⽂件,查看得到的变量名和值. P&@~u,l{
3:如何使⽤session )5/7qeW
凡是与session有关的,之前必须调⽤函数session_start(); 5oUsH9M
为session付值很简单,如: GC!Ij7^
CODE: N-M�0w]%o
[Copy to clipboard] 1cEbp4.
<?php 0_>!m* QG
Session_start(); BI5+b-ubi
$Name = "这是⼀个Session例⼦"; pOl5S5
Session_Register("Name");//注意,不要写成:Session_Register(" $Name"); 7T<g@A?V
Echo $_SESSION["Name"]; P+9UsJK~/[
//之后$_SESSION["Name"]为"这是⼀个Session例⼦" K$Qv7=
> =Vgo�Z.=
在php4.2之后,可以为session直接付值: tk L& Xg
CODE: m~C]F<Fj<
[Copy to clipboard] t�j+~>yz|H
<?PHP +}Mdn/
Session_Start(); }Vk/yFRE*
$_SESSION["name"]="value"; . <] -CZ
> KX 4:B5L
取消session可以这样: 8*BYMWZu
CODE: exz9+ /�
[Copy to clipboard] OJ4n'rp
<?php oir{:IZk
session_start(); C)%NceYZ
session_unset(); "�f)O _B
session_destroy(); @} vk[_ZO
> 9cJ'<B
取消某个session变量在php4.2以上还有BUG. trRdF F^T
注意: qJ^19Uaw[
1:在调⽤Session_Start()之前不能有任何输出.例如下⾯是错误的. H+y*4cfP:
========================================== kAc/77
1⾏ ~Wr( P_Ag>
2⾏ <?PHP DH=tJ"m}
3⾏ Session_Start();//之前在第⼀⾏已经有输出 M h6M{)
4⾏ ..... O#px(L
5⾏ ?> xzT@V<~nU
========================================== (V)eJ&(}
提⽰1: 'tv(dn9~a.
凡是出现"........headers ",就是Session_Start()之前向浏览器输出信息. vW:{?O
去掉输出就正常,(COOKIE也会出现这种错误,错误原因⼀样) q3Ilgi3#'
提⽰2: [u e{ym%G"
如果你的Session_Start()放在循环语句⾥,并且很难确定之前哪⾥向浏览器输出信息,可以⽤下⾯这种⽅法: %V?@r_R 1⾏ <?PHP Ob_Start(); ?> DQWlgE
........这⾥是你的程序...... w*np4Q+
2:这是什么错误 Y"4U=?l"
Warning: session_start(): open(/tmp//sess_7d190aa36b4c5ec13a5c1649cc2da23f, O_RDWR) failed:.... '#t"t,a
因为你没有指定session⽂件的存放路径. QH9@POzN
解决⽅法: !)1J]{CZW#
(1)在c盘建⽴⽂件夹tmp tj8'l$pS[
(2)打开php.ini,到session.save_path,修改为session.save_path= "c:/tmp" =9(s:f]
4:为什么我向另⼀⽹页传送变量时,只得到前半部分,以空格开头的则全部丢失 SpG)d=8bQ
CODE: vb -7]~-=`
[Copy to clipboard] W1XEWc-4
<?php a";|8~0
$Var="hello php";//修改为$Var=" hello php";试试得到什么结果 oQdA;M
$post= "receive.php?Name=".$Var; /8Z-l-zUg
header("location:$post"); <^T*F3.rL
> p' u*J 5t
receive.php的内容: L ^0}I`"m
CODE: S^D
[Copy to clipboard] KcfBo/d.Cu
<?PHP ~b2 ~HR
Echo "<pre>"; Q,V ~MyM
Echo $_GET["Name"]; 23:'7W$
Echo "</pre>"; 9LL9}]$
> almcf9`N6l
正确的⽅法是: NwPNS{#>
CODE: ./x cJY~b
[Copy to clipboard] *lo4&jm+
<?php x) y{=>
$Var="hello php"; 9L#�__
$post= "receive.php?Name=".urlencode($Var); vK(R,zu �
header("location:$post"); Fe)3zGZh
> &AR3H^)<
在接收页⾯你不需要使⽤Urldecode(),变量会⾃动编码. >;|1rbfxkk
5:如何截取指定长度汉字⽽不会出现以"?>"结尾,超出部分以"..."代替 (d[~3zcR
⼀般来说,要截取的变量来⾃Mysql,⾸先要保证那个字段长度要⾜够长,⼀般为char(200),可以保持100个汉字,包括标点. ^L"YB<_<
CODE: &jyL* %
[Copy to clipboard] fzW{QH8Fa(
<?php ^|6V^w
<?PHP Lgx/#>&DZ$
$str="这个字符好长呀,^_^"; ~2gT {'7
$Short_Str=showShort($str,4);//截取前⾯4个汉字,结果为:这个字符... *e Opn:
Echo "$Short_Str"; PfgIF Ub$N
Function csubstr($str,$start,$len) *?R~'�j,p
{ mW71Jwf@^/
$strlen=strlen($str); P5B>1o
$clen=0; v>!)r&q
for($i=0;$i<$strlen;$i++,$clen++) uNb:xd#y
if ($clen>=$start+$len) soX3eu7i
break; -4 fu}f[*
if(ord(substr($str,$i,1))>0xa0) L6!(Ojp E
{ M"MrY0v*y
if ($clen>=$start) M skpsFG
$tmpstr.=substr($str,$i,2); /rsO5sv
$i++; @!>"7#J4oF
} 2|wI?tAY
else u'N M&Ph
{ EcZBLe!bV
if ($clen>=$start) DoGWCS
$tmpstr.=substr($str,$i,1); FB)oGkOS{
} D`s9bc }
} eS+0[T+$b
return $tmpstr; {==7g`Jc
} 3suV^PT
Function showShort($str,$len) J~&ewZg
{ QY<0~)h
$tempstr = csubstr($str,0,$len); bv>1PdGZLQ
if ($str<>$tempstr) eN+%$ty^~y
$tempstr .= "..."; //要以什么结尾,修改这⾥就可以. {@rK#'#J!
return $tempstr; ty;2@Ud(v
} #>]� wI8
> =S;o.
6:规范你的SQL语句 ;- #YYW
在表格,字段前⾯加上"`",这样就不会因为误⽤关键字⽽出现错误, J:_T:d
当然我并不推荐你使⽤关键字. eT#9NE
例如 ZV P7 D
$Sql="INSERT INTO `xltxlm` (`author`, `title`, `id`, `content`, `date`) VALUES ('xltxlm', 'use`', 1, 'criterion your sql string ', '2003-07-11 00:00:00')" )>3 1mNd
"`"怎么输⼊? 在TAB键上⾯. K /nS^F$a
7:如何使Html/PHP格式的字符串不被解释,⽽是照原样显⽰ Cg~.l`')ri
CODE: 8%LJ(M9
[Copy to clipboard] b:FBB(R
<?PHP e[n:/ 3 &
$str="<h1>PHP</h1>"; Oc_Ud =
Echo "被解释过的: ".$str."<br>经过处理的:"; X1AjO) g
Echo htmlentities(nl2br($str)); wWc*1?zc1
> Vm]`!o:%
8:怎么在函数⾥取得函数外的变量值 E*]T#U*@n
CODE: < LrW%
[Copy to clipboard] -y 3,`R_
<?PHP 0)$!GNle
$a="PHP"; Tz9;�hr
foo(); 0W=,{f6> '
Function foo() Og+N>
{ l"-31k,8
global $a;//删除这⾥看看是什么结果 q;wBQ6rt
Echo "$a"; 5_lpCw_ z2
} 6u�!A$kM
> Yft(sc_vO
9:我怎么知道系统默认⽀持什么函数 6=48<.+%
CODE: (u17>B
[Copy to clipboard] ?% tFdf9
<?php Pf6BXn~{
$arr = get_defined_functions(); .yvGH
Function php() { "f0z I/|
php编程手册{ }E
} &RGA`{
echo "<pre>"; <&}^0r-N
Echo "这⾥显⽰系统所⽀持的所有函数,和⾃定以函数phpn"; @@'KppW
print_r($arr); 1VkxvK<c
echo "</pre>"; wBbd90#
> >N]69)8bks
10:如何⽐较两个⽇期相差⼏天 -sPwCd,qE
CODE: {Aw KY
[Copy to clipboard] D!7$9F
<?PHP aTf %B�3
$Date_1="2003-7-15";//也可以是:$Date_1="2003-6-25 23:29:14"; ~`WGC]#+F
$Date_2="1982-10-1"; >d* >E$H)L
$Date_List_1=explode("-",$Date_1); tqwVXWIud
$Date_List_2=explode("-",$Date_2); $/Br.,]NR+
$d1=mktime(0,0,0,$Date_List_1[1],$Date_List_1[2],$Date_List_1[0]); LvG~
$d2=mktime(0,0,0,$Date_List_2[1],$Date_List_2[2],$Date_List_2[0]); ~jN1wY]Y
$Days=round(($d1-$d2)/3600/24); q/]?KFIoo
Echo "偶已经奋⽃了 $Days 天^_^"; #$ uQ!s-.
> &t*J,8 :
11:为什么我升级PHP后,原来的程序出现满屏的 Notice: Undefined variable: tz,c~F* &
这是警告的意思,由于变量未定义引起的. Kj W8r]~g
打开php.ini,到最下⾯的error_reporting,修改为error_reporting = E_ALL & ~E_NOTICE $ve9Q4Q,6
对于Parse error错误 fLIv9 c
error_reporting(0)⽆法关闭. gpku)ZLQ U
如果你想关闭任何错误提⽰,打开php.ini,到display_errors,设置为display_errors = Off.以后任何错误都不会提⽰. ),OF0 那什么是error_reporting? Wt*<a'Y
12:我想在每个⽂件最前,最后⾯都加上⼀⽂件.但⼀个⼀个添加很⿇烦 dA g(
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论