關於由php小tip引發的思考的信息

  • 1、PHP小問題,一個留言功能
  • 2、php 可以做哪些有趣的小東西
  • 3、淘寶網為什麼是用PHP程序開發

第一全問題: mysubstr應該是代碼編寫者自己編寫的一個函數,PHP系統並無此函數,不過從字面上來看,應該是截取$Qinfo變量的頭250個符.

第二個問題: 這種調用屬於類調用,要麼是代碼編寫者自己封裝了一個用於操作數據庫的PHP類,要麼就是使用了第三方封裝的類.

1.得到客戶端IP地址

function getip(){

if (! empty($_SERVER[“HTTP_X_FORWARDED_FOR”])){ //使用代理的情況

$tip = split(“,”, $_SERVER[“HTTP_X_FORWARDED_FOR”]);

$cip = $tip[0];

}

else

$cip = $_SERVER[“REMOTE_ADDR”];[

return dechex(ip2long($cip));

}

2.session控制的函數

function session_begin(){

global $userid, $sid, $ip, $session, $db, $islogin;

$ip = getip();

/* 短期而言,系統默認需要支持cookie. */

if (!isset($_COOKIE[‘userid’])) return false;

else $userid = $_COOKIE[‘userid’];

if (!isset($_COOKIE[‘sid’])) return false;

else $sid = $_COOKIE[‘sid’];

/* 以上返回false意味着用戶沒有登陸,頁面將跳轉至首頁(登陸頁). */

$query = “SELECT * FROM user WHERE nickname = ‘$userid'”;

$result = $db-sql_query($query);

if ($row = $db-sql_fetchrow($result)){

if ($row[‘sid’] != $sid) return false; /* cookie傳送的sid和數據庫保存的不吻合 */

if ($row[‘lastloginip’] != $ip) return false; /* IP不吻合 */

/* 是否要考慮 session的過期 問題呢? */

}

else return false; /* 沒有這個userid */

$session = $row;

// $session[”] = $row[”];

unset($row);

$islogin = true;

return true;

}

/* bool session_end(int $userid, string $sid) */

function sesssion_end($userid, $sid){

return true;

}

3.做選美的投票程序

?php

header(“Refresh:0;url=./”); //一秒刷新

?

scriptalert(‘?php

require_once(‘mysql.php’);

require_once(‘functions.php’);

$db = new sql_db(‘localhost’,’root’,”,’selectmm’);

$user_id = $_GET[‘user_id’];

$ip = getip();

$deltime = time()-3600; //減去一小時

$sql = “delete from vote where time $deltime”; //刪除掉過期的數據

$db-sql_query($sql);

$sql = “select ip from vote where ip=’$ip’ and user_id=’$user_id'”; //查看一小時內是否投過

$linkid=$db-sql_query($sql) or die(mysql_error());

$count=$db-sql_affectedrows();

if($count)

{

echo “您已經投過票了!”;

}

else

{

$sql = “update user set vote_count=vote_count+1 WHERE user_id=’$user_id'”;

$db-sql_query($sql);

$count=$db-sql_affectedrows();

if($count)

{

echo “投票成功!”;

$sql = “insert into vote (`ip`,`user_id`,`time`) values (‘$ip’,’$user_id’,'”.time().”‘)”;//投票成功就插入一條記錄。

$db-sql_query($sql);

}

else

{

echo “投票失敗!”;

}

}

?’);

//history.back();

/script

4.smarty的搜索程序

?php

require_once(‘mysql.php’);

$db = new sql_db(‘localhost’,’root’,”,’selectmm’);

require_once(‘functions.php’);

require_once(‘session.php’);

session_begin();

require(‘./Libs/Smarty.class.php’);

$smarty = new Smarty;

$title = “首頁”;

$smarty-assign(“islogin”,$islogin);

$smarty-assign(“title”,$title);

$age=$_GET[‘age’];

$arr=explode(‘,’,$age);

$y=date(‘Y’);

$md=date(‘-m-d’);

$begin=($y-$arr[1]).$md;

$end=($y-$arr[0]).$md;

$sql=”select p.* from pic_info p,user u where p.user_id=u.user_id and u.birthday between ‘$begin’ and ‘$end’ group by u.user_id”;

$link=$db-sql_query($sql) or die(mysql_error());

$row = $db-sql_fetchrowset($link);

$db-sql_freeresult();

$smarty-assign(“pic”,$row);

$smarty-display(‘index.tpl.htm’);

?

5.註冊程序

?

require(‘mysql.php’);

$str=new sql_db(‘localhost’,’root’,”,’selectmm’);

$METHOD = $_POST;

if (isset($METHOD[‘nickname’]) $METHOD[‘nickname’] != ”) $nickname = $METHOD[‘nickname’];

else { echo “scriptalert(“用戶昵稱不能為空.”)/script”; echo “scriptlocation=”register.php”/script”; }

if (isset($METHOD[‘password’]) strlen($METHOD[‘password’])=6) $password = $METHOD[‘password’];

else { echo “scriptalert(“密碼至少6位”)/script”; echo “a href=’javascript:history.go(-2);'”; }

$password2 = $METHOD[‘password2’];

if ($password != $password2)

{ echo “scriptalert(“兩次輸入密碼不一致”)/script”; echo “scriptlocation=”register.php”/script”; }

if (isset($METHOD[‘name’]) $METHOD[‘name’] != ”) $name = $METHOD[‘name’];

else { echo “scriptalert(“用戶名不能為空.”)/script”; echo “scriptlocation=”register.php”/script”; }

$birthday=$METHOD[‘Year’].$METHOD[‘Month’].$METHOD[‘Day’];

$stature = $METHOD[‘stature’];

$astrology = $METHOD[‘astrology’];

$bloodtype = $METHOD[‘bloodtype’];

$goodat = $METHOD[‘goodat’];

$work = $METHOD[‘work’];

$educate = $METHOD[‘educate’];

$homeplace = $METHOD[‘homeplace’];

$address = $METHOD[‘address’];

$tel = $METHOD[‘tel’];

$qq = $METHOD[‘qq’];

if (isset($METHOD[’email’]) $METHOD[’email’] != ”) $email = $METHOD[’email’];

else { echo “scriptalert(“Email不能為空”)/script”; echo “scriptlocation=”register.php”/script”; }

if (!eregi(“^[0-9a-z.-_]+@[0-9a-z.]+.[a-z]$”,$email)) { echo “scriptalert(“電子郵件格式不合法”)/script”; echo “scriptlocation=”register.php”/script”; }

$dian =$METHOD[‘dian’];

if (isset($METHOD[‘myself’]) $METHOD[‘myself’] != ”) $myself = $METHOD[‘myself’];

else { echo “scriptalert(“用…..不能為空”)/script”; echo “scriptlocation=”register.php”/script”; }

if(isset($METHOD[‘enounce’]) $METHOD[‘enounce’]!=”)$enounce = $METHOD[‘enounce’];

else { echo “scriptalert(“…..不能為空”)/script”; echo “scriptlocation=”register.php”/script”; }

$query = “SELECT * FROM user WHERE nickname =’$nickname’ or email=’$email'”;

$result = $str-sql_query($query)or die(mysql_error()); ;

if ($row = $str-sql_fetchrow($result))

{ echo “scriptalert(“對不起,該用戶已經註冊”)/script”; echo “scriptlocation=”register.php”/script”; }

$password = md5($password);

$query = “INSERT INTO `user` (`nickname`,`password`,`name`,`birthday`,`astrology`,`bloodtype`,`stature`,`goodat`,`work`,`educate`,`homeplace`,`address`,`tel`,`email`,`qq`,`dian`,`myself`,`enounce`) VALUES(‘$nickname’,’$password’,’$name’,’$birthday’,’$astrology’,’$bloodtype’,’$stature’,’$goodat’,’$work’,’$educate’,’$homeplace’,’$address’,’$tel’,’$email’,’$qq’,’$dian’,’$myself’,’$enounce’)”;

if($str-sql_query($query))

$str-sql_close();

echo “scriptalert(“恭喜你,註冊成功”)/script”;

echo “scriptlocation=”login.php”/script”;

?

6.提交參數 JS控制

echo “tda href=’delete.php?nickname=’ onclick=”return confirm(‘確定刪除嗎?rn此操作不可恢復’)”font color=red刪除該用戶/font/a/td”;

7.在給同事做一個文本處理,兩個文檔一個有7萬條記錄,開始用嵌套循環,php死了,後面用數組解決了問題

?php

if(($fp=fopen(“1.txt”,”a+”))===false)

{

die(“打開文件失敗”);

}

$data1=file(“old.txt”) or die(“打開文件失敗”);

$data2=file(“sports.txt”) or die(“打開文件失敗”);

foreach($data1 as $data)

{

$x = split(“[./]”,$data);

$name = $x[count($x)-2];

$a[$name][‘md5’]=$data;

}

foreach($data2 as $data)

{

$x = split(“[,./]”,$data);

$name = $x[count($x)-2];

if(isset($a[$name]))

$a[$name][‘name’]=$x[0];

}

foreach($a as $value)

{

$str=$value[‘md5′].’,’.$value[‘name’];

fwrite($fp,$str);

echo $value[‘md5′].’,’.$value[‘name’].”br”;

fwrite($fp,$str);

}

?

8.驗證碼

?php

/*

* Filename:authimg.php

*/

Header(“Content-type:image/PNG”);

session_start();

$auth_num = “”;

/*創建一個基於調色板的圖像*/

$im = imagecreate(63, 20);

/*初始化一個隨機種子*/

srand((double)microtime() * 1000000);

$auth_num_k = md5(rand(0, 9999));

$auth_num = substr($auth_num_k, 17, 5);

/*賦值會話變量*/

$_SESSION[‘authnum’] = $auth_num;

$black = ImageColorAllocate($im, 0, 0, 0);

$white = ImageColorAllocate($im, 255, 255, 255);

$gray = ImageColorAllocate($im, 200, 200, 200);

ImageFill($im, 63, 20, $black);

imagestring($im, 5, 10, 3, $auth_num,$gray);

for ($i = 0;$i 200;$i++){

$randcolor = ImageColorallocate($im, rand(0,255), rand(0,255), rand(0,255));

imagesetpixel($im, rand()%70, rand()%30, $randcolor);

}

ImagePNG($im);

ImageDestroy($im);

?

從用戶的角度講:PHP的開發成本低,速度較快,比用ASP和JSP的開發性價比高。 從技術的角度講: PHP是一個很優秀的工具,它可以簡單,也可以複雜。不一樣的項目,應該用不一樣的PHP。小項目 – 簡單而直接的PHP 一般對於一個功能頁面在20以下的網站,我們可以用一個很簡單的框架結構來寫。在這個規模上,我建議是使用比較直接的面向過程編碼方法,原因很簡單,沒有必要把class文件弄的N 多,結果controller裡邊就一個new就完了。當然,需求頻繁變化的項目除外。

在這個級別上,php優點表現的很明顯:快速開發,一目了然。缺點同時也被隱藏得很好。 中型項目 – 結構優美的面向對象化的PHP 對於一個中型項目,我建議使用一個良好設計的框架來做,這個框架可以是基於MVC模型,封裝了眾多底層操作的,當然,一定要有一個好的最好是透明的cache機制,這樣,我們為了適應變化而加入的OO機制可以運行得更快更好。 在這個級別上。php的缺點開始凸現,像對OO支持的不完整(這個PHP5有很大改進),只能單線程模式。另外一些外圍工具開始出現缺乏支持,像PHP沒有好的重構工具,沒有好的集成到IDE中的單元測試工具。優點當然還是原來的快速開發,廣泛的可用的開源資源。 大型項目 – 擴展、優化後的PHP 這裡的大型項目,簡單的指分佈式項目,就是說,你的程序需要被部署在N台服務器上了。在這個層級上,PHP比起J2EE的確缺乏很多支持。我曾和shadow在735上詳細討論過PHP要在大型系統上應用需要解決的一些問題,當然這些問題不光是PHP這個語言的問題,也包括了周邊開發的問題: 1 PHP的頁面代碼共享,PHP的源代碼被載入內存一次以後,就在其中保留 – 這個用APC和Zend的優化器可以搞定。 2 PHP頁面之間的數據對象共享,a.php和b.php之間可以共享一個數據對象,比如數組,這個現在可以用序列化來作,但是會有文件io,這塊可以用共享內存或者memcached來處理。 3 PHP的數據庫連接池,因為在多前端的情況下,PHP控制不住對數據庫的連接,所以需要在數據庫前邊去作一個連接池,類似於sqlrelay的東西。另外數據緩存也是很重要的,大壓力開發有一個tip,就是能不動數據庫就不要動數據庫。 4 PHP的前端cache系統。一個透明的可控制的cache機制,確保網站的頁面以最少次數查詢數據庫。這個有很多實現,但是沒有找到特別好的。 5 一個PHP應用,成功的解決調這幾個問題以後,應付稍微大一點的壓力是沒有什麼問題的。 在這個級別上,重要的是,把PHP Java C++ python之類融合起來,使其成為一個高效系統。我們可以用memcached來做分佈式內存管理,可以用Lucene 來作全文檢索,用EJB 容器來放一些業務邏輯組件,PHP則作為前端和系統的膠水,快速而靈活的把這些粘合起來。

原創文章,作者:簡單一點,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/127038.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
簡單一點的頭像簡單一點
上一篇 2024-10-03 23:13
下一篇 2024-10-03 23:13

相關推薦

  • PHP和Python哪個好找工作?

    PHP和Python都是非常流行的編程語言,它們被廣泛應用於不同領域的開發中。但是,在考慮擇業方向的時候,很多人都會有一個問題:PHP和Python哪個好找工作?這篇文章將從多個方…

    編程 2025-04-29
  • PHP怎麼接幣

    想要在自己的網站或應用中接受比特幣等加密貨幣的支付,就需要對該加密貨幣擁有一定的了解,並使用對應的API進行開發。本文將從多個方面詳細闡述如何使用PHP接受加密貨幣的支付。 一、環…

    編程 2025-04-29
  • Java 監控接口返回信息報錯信息怎麼處理

    本文將從多個方面對 Java 監控接口返回信息報錯信息的處理方法進行詳細的闡述,其中包括如何捕獲異常、如何使用日誌輸出錯誤信息、以及如何通過異常處理機制解決報錯問題等等。以下是詳細…

    編程 2025-04-29
  • 使用Python爬蟲獲取電影信息的實現方法

    本文將介紹如何使用Python編寫爬蟲程序,來獲取和處理電影數據。需要了解基本的Python編程語言知識,並使用BeautifulSoup庫和Requests庫進行爬取。 一、準備…

    編程 2025-04-28
  • 使用PHP foreach遍歷有相同屬性的值

    本篇文章將介紹如何使用PHP foreach遍歷具有相同屬性的值,並給出相應的代碼示例。 一、基礎概念 在講解如何使用PHP foreach遍歷有相同屬性的值之前,我們需要先了解幾…

    編程 2025-04-28
  • Python爬取網頁信息

    本文將從多個方面對Python爬取網頁信息做詳細的闡述。 一、爬蟲介紹 爬蟲是一種自動化程序,可以模擬人對網頁進行訪問獲取信息的行為。通過編寫代碼,我們可以指定要獲取的信息,將其從…

    編程 2025-04-28
  • 如何使用Python執行Shell命令並獲取執行過程信息

    本文將介紹如何使用Python執行Shell命令並獲取執行過程信息。我們將從以下幾個方面進行闡述: 一、執行Shell命令 Python內置的subprocess模塊可以方便地執行…

    編程 2025-04-28
  • Python實現身份信息模擬生成與查驗

    本文將從以下幾個方面對Python實現身份信息模擬生成與查驗進行詳細闡述: 一、身份信息生成 身份信息生成是指通過代碼生成符合身份信息規範的虛假數據。Python中,我們可以使用f…

    編程 2025-04-27
  • PHP獲取301跳轉後的地址

    本文將為大家介紹如何使用PHP獲取301跳轉後的地址。301重定向是什麼呢?當我們訪問一個網頁A,但是它已經被遷移到了另一個地址B,此時若服務器端做了301重定向,那麼你的瀏覽器在…

    編程 2025-04-27
  • Dapper使用getschema獲取表信息

    本文旨在介紹Dapper中使用getschema獲取表信息的方法和注意事項。 一、獲取某張表的所有列信息 使用Dapper獲取某張表信息,可以使用 `IDbConnection.G…

    編程 2025-04-27

發表回復

登錄後才能評論