亚洲韩日午夜视频,欧美日韩在线精品一区二区三区,韩国超清无码一区二区三区,亚洲国产成人影院播放,久草新在线,在线看片AV色

您好,歡迎來到思海網絡,我們將竭誠為您提供優質的服務! 誠征網絡推廣 | 網站備案 | 幫助中心 | 軟件下載 | 購買流程 | 付款方式 | 聯系我們 [ 會員登錄/注冊 ]
促銷推廣
客服中心
業務咨詢
有事點擊這里…  531199185
有事點擊這里…  61352289
點擊這里給我發消息  81721488
有事點擊這里…  376585780
有事點擊這里…  872642803
有事點擊這里…  459248018
有事點擊這里…  61352288
有事點擊這里…  380791050
技術支持
有事點擊這里…  714236853
有事點擊這里…  719304487
有事點擊這里…  1208894568
有事點擊這里…  61352289
在線客服
有事點擊這里…  531199185
有事點擊這里…  61352288
有事點擊這里…  983054746
有事點擊這里…  893984210
當前位置:首頁 >> 技術文章 >> 文章瀏覽
技術文章

Php常見問題總結

添加時間:2014-7-27 1:51:54  添加: 思海網絡 
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代碼:--------------------------------------------------------------------------------

<?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代碼:--------------------------------------------------------------------------------

<?php
Session_start();
$Name = "這是一個Session例子";
Session_Register("Name");//注意,不要寫成:Session_Register("$Name");
Echo $_SESSION["Name"];
//之后$_SESSION["Name"]為"這是一個Session例子"
?>

--------------------------------------------------------------------------------

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

PHP代碼:--------------------------------------------------------------------------------

<?PHP
Session_Start();
$_SESSION["name"]="value";
?>

--------------------------------------------------------------------------------

取消session可以這樣:

PHP代碼:--------------------------------------------------------------------------------

<?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"

4:為什么我向另一網頁傳送變量時,只得到前半部分,以空格開頭的則全部丟失


PHP代碼:--------------------------------------------------------------------------------

<?php
$Var="hello php";//修改為$Var="     hello php";試試得到什么結果
$post= "receive.php?Name=".$Var;
header("location:$post");
?>

--------------------------------------------------------------------------------

receive.php的內容:

PHP代碼:--------------------------------------------------------------------------------

<?PHP
Echo "<pre>";
Echo   $_GET["Name"];
Echo "</pre>";
?>

--------------------------------------------------------------------------------


正確的方法是:

PHP代碼:--------------------------------------------------------------------------------

<?php
$Var="hello php";
$post= "receive.php?Name=".urlencode($Var);
header("location:$post");
?>

--------------------------------------------------------------------------------


在接收頁面你不需要使用Urldecode(),變量會自動編碼.


5:如何截取指定長度漢字而不會出現以"?>"結尾,超出部分以"..."代替


一般來說,要截取的變量來自Mysql,首先要保證那個字段長度要足夠長,一般為char(200),可以保持100個漢字,包括標點.

PHP代碼:--------------------------------------------------------------------------------

<?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代碼:--------------------------------------------------------------------------------

<?PHP
$str="<h1>PHP</h1>";
Echo "被解釋過的: ".$str."<br>經過處理的:";
Echo   htmlentities(nl2br($str));
?>

--------------------------------------------------------------------------------

8:怎么在函數里取得函數外的變量值


PHP代碼:--------------------------------------------------------------------------------

<?PHP
$a="PHP";
foo();
Function foo()
{
  global $a;//刪除這里看看是什么結果
  Echo "$a";
}
?>

--------------------------------------------------------------------------------

9:我怎么知道系統默認支持什么函數


PHP代碼:--------------------------------------------------------------------------------

<?php 
$arr = get_defined_functions(); 
Function php() {
}
echo   "<pre>"; 
Echo   "這里顯示系統所支持的所有函數,和自定以函數php\n";
print_r($arr); 
echo   "</pre>"; 
?> 
--------------------------------------------------------------------------------


10:如何比較兩個日期相差幾天


PHP代碼:--------------------------------------------------------------------------------

<?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代碼:--------------------------------------------------------------------------------

<?php 
Include "auto_prepend_file.php" ;

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


Include "auto_append_file.php";
?>

--------------------------------------------------------------------------------


13:如何利用PHP上傳文件

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代碼:--------------------------------------------------------------------------------

<?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代碼:--------------------------------------------------------------------------------

<?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代碼:--------------------------------------------------------------------------------

<?php 
$s="http://{$_SERVER['HTTP_HOST']}:{$_SERVER["SERVER_PORT"]}{$_SERVER['_NAME']}"; 
$se=''; 
foreach ($_GET as $key => $value) {     
$se.=$key."=".$value."&";     
}   
$se=Preg_Replace("/(.*)&$/","$1",$se); 
$se?$se="?".$se:"";
echo   $s."?$se"; 
?> 
--------------------------------------------------------------------------------


20:我點擊后退按鈕,為什么之前填寫的東西不見

這是因為你使用了session.
解決辦法:

PHP代碼:--------------------------------------------------------------------------------

<?php 
session_cache_limiter('private, must-revalidate');
session_start(); 
...........
..........
?>

--------------------------------------------------------------------------------

21:怎么在圖片里顯示IP地址


PHP代碼:--------------------------------------------------------------------------------

<?
  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


PHP代碼:--------------------------------------------------------------------------------

<? 
function iptype1 () { 
if (getenv("HTTP_CLIENT_IP")) { 
   return getenv("HTTP_CLIENT_IP"); 

else { 
   return "none"; 


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:正則到底怎么用

點擊這里
正則表達式中的特殊字符


26:用Apache后,主頁出現亂碼


方法一: 
AddDefaultCharset ISO-8859-1 改為 AddDefaultCharset off

方法二: 
AddDefaultCharset GB2312
========================================================
tip:
大家貼代碼時GB2312會被解釋成??????

改成這樣就不會
GB2312

10:如何比較兩個日期相差幾天,(更簡單的算法)


PHP代碼:--------------------------------------------------------------------------------

<?PHP
$Date_1="2003-7-15";//也可以是:$Date_1="2003-7-15 23:29:14";
$Date_2="1982-10-1";
$d1=strtotime($Date_1);
$d2=strtotime($Date_2);
$Days=round(($d1-$d2)/3600/24);
Echo   "偶已經奮斗了 $Days 天'";
?>

--------------------------------------------------------------------------------


27:為什么單引號,雙引號在接受頁面變成(\'\")


解決方法:
方法一:在php.ini中設置:magic_quotes_gpc = Off
方法二: $str=stripcslashes($str)


28:怎么讓程序一直運行下去,而不是超過30秒就停止


set_time_limit(60)//最長運行時間一分鐘
set_time_limit(0)//運行到程序自己結束,或手動停止


29:計算當前在線人數

例子一:用文本實現

PHP代碼:--------------------------------------------------------------------------------

<?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."人在線";

?> 
--------------------------------------------------------------------------------

例子二:
用數據庫實現在線用戶


30:什么是模板,怎么用


這里有幾篇關于模板的文章

我用的是phplib模板
下面是其中幾個函數的使用

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

$T->Set_Block("在set_file中定義的","<!-- 來自模板 -->","隨便定義");

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

$T->Parse("隨便輸出結果","在Set_File中定義的");

設置循環格式為:

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

如何將模板生成靜態網頁

PHP代碼:--------------------------------------------------------------------------------

<?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");//重定向到生成的網頁
}
?> 
--------------------------------------------------------------------------------

phplib下載地址 smarty下載地址


31:怎么用php解釋字符

比如:輸入2+2*(1+2),自動輸出8
可以用eval函數

PHP代碼:--------------------------------------------------------------------------------

<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、數據、變量、程序

分享到:

頂部 】 【 關閉
版權所有:佛山思海電腦網絡有限公司 ©1998-2024 All Rights Reserved.
聯系電話:(0757)22630313、22633833
中華人民共和國增值電信業務經營許可證: 粵B1.B2-20030321 備案號:粵B2-20030321-1
網站公安備案編號:44060602000007 交互式欄目專項備案編號:200303DD003  
察察 工商 網安 舉報有獎  警警  手機打開網站