Php高手帶路--問題彙總解答[2]

   [回顧]:上集介紹了"調試程序","如何使用session","規範SQL語句"等15個問題(Php高手帶路--問題彙總解答[1])。本集繼續做出16條常見問題的解答。
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)) ;
  <?php

  //$content來自數據庫

  $content=nl2br(htmlspecialchars($content));

  $content=str_replace(" ","&nbsp;",$content);

  $content=str_replace("\n","<br>\n",$content);

  ?>



19:如何讀取當前地址欄信息
  PHP代碼:

  <?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代碼:
  <?php session_cache_limiter('private, must-revalidate');session_start();
  .....................?>
21:怎麼在圖片裏顯示IP地址
  PHP代碼:
  <? Header("Content-type: p_w_picpath/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);    
  p_w_picpathcreatefrompng($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


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

  ?>
  到此,php的問題解答就爲你們介紹完畢,但願能對各位有所幫助。
相關文章
相關標籤/搜索