本文目錄一覽:
- 1、PHP7.4.9版本正式更新,你知道了嗎?
- 2、PHP是什麼
- 3、dnmp一鍵部署搞定的php開發環境基於Docker的LNMP一鍵安裝程序
- 4、php是什麼意思
- 5、在php中如何對多條記錄進行分頁
- 6、php8和php7不兼容
PHP7.4.9版本正式更新,你知道了嗎?
PHP 7.4.9 版本現已發布,具體更新內容如下:
Apache:修復了錯誤
#79030
(升級 apache2handler 的 php_apache_sapi_get_request_time 以返回 usec)。COM:修復了錯誤
#63208
(BSTR 到 PHP字 符串轉換不是 binary safe)。修復了錯誤
#63527
(DCOM 無法使用用戶名、密碼參數。)。Core :修復了錯誤
#79740
(不能靜態調用 serialize() 和 unserialize() methods)。修復了錯誤
#79783
(php_str_replace_common 中的段錯誤)。修復了錯誤
#79778
(如果轉儲帶有未解決的靜態變量的閉包,則斷言失敗)。修復了錯誤
#79779
(通過引用分配字符串偏移量的屬性時斷言失敗)。修復了錯誤
#79792
(如果銷毀了空數組,則不會刪除 HT 迭代器)。修復了錯誤
#78598
(在 undef index RW error segfaults 期間更改數組)。修復了錯誤
#79784
(如果在數組寫獲取期間的 undef var 期間更改數組,則在 free 後使用)。修復了錯誤
#79793
(如果更改了未定義索引警告中使用的字符串,則 free 後使用)。修復了錯誤
#79862
(子級中的公共非靜態屬性應優先於私有靜態)。修復了錯誤
#79877
(getimagesize 函數在一個空字節後 silently truncates)(cmb)Fileinfo:修復了錯誤
#79756
(finfo_file 崩潰(FILEINFO_MIME))。FTP:修復了錯誤
#55857
(大文件上的 ftp_size)。Mbstring:修復了錯誤
#79787
(mb_strimwidth 不會修剪字符串)。Phar:修復了錯誤
#79797
(在 phar_parse_zipfile 函數中使用 freed hash key)。(CVE-2020-7068)Reflection:修復了錯誤
#79487
(::getStaticProperties() 忽略屬性修改)。修復了錯誤
#69804
(::getStaticPropertyValue() throws on protected props)。修復了錯誤
#79820
(當複製到 ReflectionProperty 的類型被解析時,在 free 之後使用)。Standard:修復了錯誤
#70362
(Can’t copy() large ‘data://’ with open_basedir)。修復了錯誤
#78008
(dns_check_record() 在 Alpine 上始終返回 true)。修復了錯誤
#79839
(array_walk() 不 respect 屬性類型)。
PHP是什麼
PHP(PHP:Hypertext Preprocessor遞歸縮寫)中文名字是:“超文本預處理器”,是一種廣泛使用的通用開源腳本語言,適合於Web網站開發,它可以嵌入HTML中。編程范型是面向對象、命令式編程的,截止2019年4月24日為止,最新的版本是PHP 5.6.0(28 Aug 2014),其操作的系統為windows/linux/Mac跨平台。
擴展資料:
PHP的功能
1、創建博客
使用PHP創建博客wordpres,可以輕鬆創建博客。即使您不具備PHP知識,也可以使用它,但如果您可以編寫PHP,則可以自定義您的博客並創建主題。
2、網站開發
60%全球互聯網網站採用php技術,80%國內互聯網網站使用php開發。這些網站包含購物網站,政府企業網站,QQ空間,論壇博客等等。
3、移動端微網站開發以及小程序
移動設備的普及為移動互聯網的快速發展奠定了基礎!手機淘寶網站,手機京東網站等等, 微信公眾號應用中的微網站。
參考資料來源:百度百科——PHP
dnmp一鍵部署搞定的php開發環境基於Docker的LNMP一鍵安裝程序
項目地址:GitHub – suyar/docker-php-env: 基於 Docker 的 PHP 開發環境
本項目是一套用於 PHP 的 Docker 開發環境,站在巨人 [DNMP] 的肩膀上衍生的一個版本。
為什麼會有這個項目:
DNMP 首次啟動需要進行構建,時間較長,步驟繁瑣
DNMP 有一些容器拋出的錯誤日誌,沒有進行修復
DNMP 部分鏡像 TZ 環境變量不生效
DNMP 產生大量 docker logs 佔用磁盤空間,需要重建容器才能釋放
其他問題…
大部分場景下,我們希望開箱即用。當然,凡事都有兩面性,不需要構建的代價,就是對鏡像的定製化能力變低,看個人取捨。
重要的事情說三遍:
該項目僅適用於本地開發,不能用於生產環境
該項目僅適用於本地開發,不能用於生產環境
該項目僅適用於本地開發,不能用於生產環境
目前支持開箱即用的服務有:
Mysql5.7(使用官方鏡像)
Mysql8.0(使用官方鏡像)
phpMyAdmin(使用官方鏡像)
Redis(使用官方鏡像)
phpRedisAdmin(使用官方鏡像)
Memcached(使用官方鏡像)
PHP8.1/PHP8.0/PHP7.4/PHP7.3(使用基於官方的集成鏡像 suyar/php:x.x-integration)
Nginx(使用官方鏡像)
RabbitMQ(使用官方鏡像)
MongoDB(使用官方鏡像)
Mongo-Express(使用官方鏡像)
Elasticsearch(使用官方鏡像)
Kibana(使用官方鏡像)
目錄
1. 目錄結構
2. 快速使用
3. PHP 擴展
3.1 PHP 預置擴展
3.2 安裝 PHP 擴展
3.3 在 PHP 容器中執行命令
3.4 使用 composer
4. 常見問題
4.1 如何在其他容器中請求 nginx 配置的域名
4.2 在 PHP 容器中使用 cron 定時任務
4.3 在 PHP 容器中使用 supervisor
4.4 清空服務數據
License
php是什麼意思
php通常指超文本預處理器,用於面向對象、命令式編程,是一種通用開源腳本語言。
主要特點:
為開源性和免費性、快捷性、數據庫連接的廣泛性、面向過程和面向對象並用。優點是利於學習,使用廣泛。此外,php還可以指菲律賓比索的標準貨幣代碼符號,MPLS網絡中的倒數第二跳彈出功能。是英文超級文本預處理語言Hypertext Preprocessor的縮寫。PHP 是一種HTML 內嵌式的語言,是一種在服務器端執行嵌入HTML文檔的腳本語言,語言風格有些類似於C語言,被廣泛的運用。
簡介:
PHP(外文名:PHP: Hypertext Preprocessor,中文名:“超文本預處理器”)是一種通用開源腳本語言。語法吸收了C語言、Java和Perl的特點,利於學習,使用廣泛,主要適用於Web開發領域。PHP 獨特的語法混合了C、Java、Perl以及PHP自創的語法它可以比CGI或者Perl更快速地執行動態網頁。用PHP做出的動態頁面與其他的編程語言相比,PHP是將程序嵌入到HTML(標準通用標記語言下的一個應用)文檔中去執行,執行效率比完全生成HTML標記的CGI要高許多;PHP還可以執行編譯後代碼,編譯可以達到加密和優化代碼運行,使代碼運行更快。
特性包括:
1、PHP 獨特的語法混合了 C、Java、Perl 以及 PHP 自創新的語法
2、PHP可以比CGI或者Perl更快速的執行動態網頁——動態頁面方面,與其他的編程語言相比,PHP是將程序嵌入到HTML文檔中去執行,執行效率比完全生成htmL標記的CGI要高許多;PHP具有非常強大的功能,所有的CGI的功能PHP都能實現
3、 PHP支持幾乎所有流行的數據庫以及操作系統。
4、最重要的是PHP可以用C、C++進行程序的擴展!
語言特點:
開源免費
PHP是一個受眾大並且擁有眾多開發者的開源軟件項目,Linux + Nginx + Mysql + PHP是它的經典安裝部署方式,相關的軟件全部都是開源免費的,所以使用PHP可以節約大量的正版授權費用。不過PHP作為一個開源軟件,它缺乏大型科技公司的支持背景,網絡上對它的唱衰也是經久不衰,不過它的持續迭代和性能持續增強的現實卻是鼓舞人心的,PHP社區用實際行動給予各種質疑強有力的回擊。
快捷高效
PHP的內核是C語言編寫的基礎好效率高,可以用C語言開發高性能的擴展組件;PHP的核心包含了數量超過1000的內置函數,功能應有盡有很全面,開箱即用程序代碼簡潔; PHP數組支持動態擴容,支持以數字、字符串或者混合鍵名的關聯數組,能大幅提高開發效率; PHP是一門弱類型語言,程序編譯通過率高,相對其他強類型語言開發效率快;PHP天然熱部署,在php-fpm運行模式下代碼文件覆蓋即完成熱部署;PHP經過20多年的發展,在互聯網上可以搜到海量的參考資料供參考學習。
性能提升
PHP版本越高它的整體性能越高,根據官方介紹,PHP7.0.0 對比PHP5.6性能就提升了2倍,PHP7.4已經比PHP7.0快了約30%,PHP8.0在性能上又相對PHP7.4大約改進了10%。PHP 8.0 引入了 JIT編譯器特性,同時加入多種新的語言功能,例如命名參數、聯合類型、註解、Constructor Property Promotion、match 表達式、nullsafe 運算符以及對類型系統、錯誤處理和一致性的改進。PHP擁有自己的核心開發團隊,保持5年發布一個大版本、1個月發布2個小版本的頻率,最新的版本是PHP8.08 。
跨平台
每個平台都有對應的php解釋器版本,指針對不同平台均編譯出目標平台的二進制碼(PHP解釋器),php開發的程序可以不經修改運行在windows、linux、unix等多個操作系統上。
常駐內存
php-cli模式下可以實現程序常駐內存,各種變量和數據庫連接都能長久保存在內存實現資源復用,比較常用的做法是結合swoole 組件編寫cli框架。
頁面生命周期
在php-fpm模式下,所有的變量都是頁面級的,無論是全局變量還是類的靜態成員,都會在頁面執行完畢後被清空,對程序員水平要求低,佔用內存非常少,特別適合中小型系統的開發。
運行機制:
PHP常見的運行模式有2種,分別是php-fpm 和php-cli 。當PHP 選擇運行在php-fpm模式下,所有的變量都是頁面級的,無論是全局變量還是類的靜態成員,都會在頁面執行完畢後被清空。運行在php-cli模式下可以實現程序常駐內存,各種變量和數據庫連接都能長久保存在內存 實現資源復用,性能可以得到很大的提升,php-cli開發比較複雜能但是能夠獲取更高的性能,對開發者的要求比較高需要比較高的開發水平,比較常用的模式是結合swoole 組件編寫cli框架,各種變量能保存在跨進程的高性能共享內存 Table ,可以開發出支持熱啟動的php-cli可靠各類應用系統。
php-fpm在PHP 5.3.3 版本成為了官方正式組件(2010-07-22),它提供了穩定可靠的進程管理服務,進程不足時候可以智能擴充數量,閑置時候可以自動回收銷毀多餘的進程,同時它對程序的容錯能力很強大運行非常穩定,可以應付企業級的開發需求。php-fpm友好的完成了使用HTTP/HTTPS等TCP/IP互聯網協議下進行的用戶的輸入輸出,頁面級生命周期各種資源用完即釋放,不存在內存泄漏的問題。php-fpm也提供有一些常駐內存的技術支持,例如PHP 7.4引入的opcache.preload也能實現局部的PHP類和函數的常駐內存,不過這個方法不夠靈活,和服務器配置捆綁的太死了。
php-cli因為能實現各類資源的常駐內存,所以可以資源復用,更高效完成多進程編程和異步編程,可以開發出負載能力更高的應用系統。但是相對php-fpm的簡單編程開發,開發者要注意很多的事項和需要做很多附加的控制器開發,否則就無法實現期待中的高性能。
首先開發者需要去實現可靠的進程管理服務,保證系統進程遇到各類錯誤退出運行後能夠自動創建新的進程,只有這樣才能保證後續的服務請求有足夠空閑進程可分配。每個業務代碼段都要做異常處理,讓進程遇到非致命錯誤時候不會退出,因為進程重啟意味程序和各類資源需要再次加載,這個過程性能消耗不小,所以只有進程穩定運行了常駐內存才有意義。
其次因為常駐內存,編寫的新的程序必須重啟服務才能生效,這一點習慣了fpm模式的開發者會感到比較陌生。另外開發者需要手工釋放內存,否則系統長時間運行後會出現內存泄露。同時在cli模式下,我們不能像fpm里直接用 $_SERVER、$_POST、$_GET、$_COOKI和$_FILES 進行編程工作,需要自己去解析各種互聯網通訊協議完成用戶的輸入輸出。要實現多進程編程利用多核CPU計算,還有學習使用pcntl和posix編程,這裡涉及到了異步編程邏輯,這塊難度還是比較大的。比較常用的模式是結合swoole 組件編寫cli框架。
PHP是一個活躍的社區開發語言,有專業的核心開發團隊在持續不斷的迭代,最近一個版本就是PHP 8.0.8 引入了很多的新特性。
語言參考:
內置函數
PHP 有很多標準的函數和結構。還有一些函數需要和特定的擴展模塊一起編譯,否則在使用它們的時候就會得到一個致命的“未定義函數”錯誤。例如,要使用 image 函數中的 imagecreatetrue,需要在編譯 PHP 的時候加上 GD 的支持。或者要使用 mysqli_connect函數,就需要在編譯 PHP 的時候加上 MySQLi 支持。有很多核心函數已包含在每個版本的 PHP 中如字符串和變量函數。調用 phpinfo或者 get_loaded_extensions可以得知 PHP 加載了那些擴展庫。同時還應該注意,很多擴展庫默認就是有效的。
靜態網站與動態網站的區別
靜態網站:web1.0 時代
動態網站:web2.0 時代
靜態網站特點:
1、網頁內容一經發布到網站服務器,無論是否有用戶訪問,每個靜態頁面的內容都是保存在網站服務器上的。也就是說,靜態網頁是實實在在保存在服務器上的文件,每個網頁都是一個獨立的文件。
2、靜態網頁的內容相對穩定,因此容易被搜索引擎檢索。
3、 靜態網頁沒有數據庫的支持,在網站製作和維護方面工作量較大,因此當網站信息量很大時完全依靠靜態網頁製作方式比較困難。
4、靜態網頁的交互性較差,在功能方面有較大的限制。
動態網站特點:
1、交互性:網頁會根據用戶的要求和選擇而動態地改變和響應,瀏覽器作為客戶端,成為一個動態交流的橋樑,動態網頁的交互性也是今後web發展的潮流。
2、自動更新:即無須手動更新HTML文檔,便會自動生成新頁面,可以大大節省工作量
3、因時因人而異:即當不同時間、不同用戶訪問同一網址時會出現不同頁面。
動態網頁是與靜態網頁相對應的,靜態網頁的後綴是以 .htm , .html , .shtml , .xml ,動態網頁的後綴是以 .asp , .jsp , .php , .perl , cgi 等形式。在動態網頁網址中有一個標誌性的符號”?”
在php中如何對多條記錄進行分頁
方法一:講sql查詢進行分頁進行,需要調用幾個函數,具體見腳本:
1.pager.class.php
?php
class pager {
public $sql; //SQL查詢語句
public $datanum; //查詢所有的數據總記錄數
public $page_size; //每頁顯示記錄的條數
protected $_errstr;
protected $_conn;
protected $_query_id;
public function query($query)///這個函數有問題,暫時可以不用
{
$ret = false;
if (!empty($query)) {
if ($this-_conn === false || !is_resource($this-_conn)) {
warningLog(__METHOD__ . ‘: query sql with no connection’, true);
return false;
}
$this-_query_id = @mysql_query($query, $this-_conn);
if ($this-_query_id === false) {
$this-_errstr = @mysql_error();
$ret = false;
} else {
$this-_errstr = ‘SUCCESS’;
$ret = $this-_query_id;
}
}
$msg = ($ret === false) ? ‘false’ : strval($ret);
debugLog(__METHOD__.”: [$msg] returned for sql query [$query]”);
return $ret;
}
function __construct($sql,$page_size) {
$result = mysql_query($sql);
$datanum = mysql_num_rows($result);
$this-sql=$sql;
$this-datanum=$datanum;
$this-page_size=$page_size;
}
//當前頁數
public function page_id() {
if($_SERVER[‘QUERY_STRING’] == “”){
return 1;
}elseif(substr_count($_SERVER[‘QUERY_STRING’],”page_id=”) == 0){
return 1;
}else{
return intval(substr($_SERVER[‘QUERY_STRING’],8));
}
}
//剩餘url值
public function url() {
if($_SERVER[‘QUERY_STRING’] == “”){
return “”;
}elseif(substr_count($_SERVER[‘QUERY_STRING’],”page_id=”) == 0){
return “”.$_SERVER[‘QUERY_STRING’];
}else{
return str_replace(“page_id=”.$this-page_id(),””,$_SERVER[‘QUERY_STRING’]);
}
}
//總頁數
public function page_num() {
if($this-datanum == 0){
return 1;
}else{
return ceil($this-datanum/$this-page_size);
}
}
//數據庫查詢的偏移量
public function start() {
return ($this-page_id()-1)*$this-page_size;
}
//數據輸出
public function sqlquery() {
return $this-sql.” limit “.$this-start().”,”.$this-page_size;
}
//獲取當前文件名
private function php_self() {
return $_SERVER[‘PHP_SELF’];
}
//上一頁
private function pre_page() {
if ($this-page_id() == 1) { //頁數等於1
return “a href=”.$this-php_self().”?page_id=1″.$this-url().”上一頁/a “;
}elseif ($this-page_id() != 1) { //頁數不等於1
return “a href=”.$this-php_self().”?page_id=”.($this-page_id()-1).$this-url().”上一頁/a “;
}
}
//顯示分頁
private function display_page() {
$display_page = “”;
if($this-page_num() = 10){ //小於10頁
for ($i=1;$i=$this-page_num();$i++) //循環顯示出頁面
$display_page .= “a href=”.$this-php_self().”?page_id=”.$i.$this-url().””.$i.”/a “;
return $display_page;
}elseif($this-page_num() 10){ //大於10頁
if($this-page_id() = 6){
for ($i=1;$i=10;$i++) //循環顯示出頁面
$display_page .= “a href=”.$this-php_self().”?page_id=”.$i.$this-url().””.$i.”/a “;
return $display_page;
}elseif(($this-page_id() 6) ($this-page_num()-$this-page_id() = 4)){
for ($i=$this-page_id()-5;$i=$this-page_id()+4;$i++) //循環顯示出頁面
$display_page .= “a href=”.$this-php_self().”?page_id=”.$i.$this-url().””.$i.”/a “;
return $display_page;
}elseif(($this-page_id() 6) ($this-page_num()-$this-page_id() 4)){
for ($i=$this-page_num()-9;$i=$this-page_num();$i++) //循環顯示出頁面
$display_page .= “a href=”.$this-php_self().”?page_id=”.$i.$this-url().””.$i.”/a “;
return $display_page;
}
}
}
//下一頁
private function next_page() {
if ($this-page_id() $this-page_num()) { //頁數小於總頁數
return “a href=”.$this-php_self().”?page_id=”.($this-page_id()+1).$this-url().”下一頁/a “;
}elseif ($this-page_id() == $this-page_num()) { //頁數等於總頁數
return “a href=”.$this-php_self().”?page_id=”.$this-page_num().$this-url().”下一頁/a “;
}
}
// 設置分頁信息
public function set_page_info() {
$page_info = “共”.$this-datanum.”條 “;
$page_info .= “a href=”.$this-php_self().”?page_id=1″.$this-url().”首頁/a “;
$page_info .= $this-pre_page();
$page_info .= $this-display_page();
$page_info .= $this-next_page();
$page_info .= “a href=”.$this-php_self().”?page_id=”.$this-page_num().$this-url().”尾頁/a “;
$page_info .= “第”.$this-page_id().”/”.$this-page_num().”頁”;
return $page_info;
}
}
?
2.腳本2:
?php
//類的用法
// 讀取分頁類
include(“pager.class.php”);
// 數據庫連接初始化
// $db = new mysql();
$impeach_host = ‘10.81.43.139’;
$impeach_usr = ‘vmtest15’;
$impeach_passwd = ‘vmtest15’;
$impeach_name = ‘ufeature’;
$impeach_con = mysql_connect($impeach_host, $impeach_usr, $impeach_passwd) or
die(“Can’t connect “.mysql_error());
mysql_select_db($impeach_name, $impeach_con);
// 這是一個sql查詢語句,並得到查詢結果
$sql = “select word from ufeature.spam_accuse_word_list where flag=’0′”;
// 分頁初始化
$page = new pager($sql,20);
// 20是每頁顯示的數量
// $res_1 = mysql_query($sql) or
// die(“Can’t get result “.mysql_error());
$result=mysql_query($page-sqlquery());
while($info = mysql_fetch_array($result,MYSQL_ASSOC)){
// while($info = mysql_fetch_array($res_1, MYSQL_ASSOC)){
echo $info[“word”].”br/”;
}
// 頁碼索引條
echo $page-set_page_info();
?
方法二:使用ajax的方法
1、首先了解SQL語句中的limit用法
SELECT * FROM table …… limit 開始位置 , 操作條數 (其中開始位置是從0開始的)
例子
取前20條記錄:SELECT * FROM table …… limit 0 , 20
從第11條開始取20條記錄:SELECT * FROM table …… limit 10 , 20
LIMIT n 等價於 LIMIT 0,n。
如select * from table LIMIT 5; //返回前5行,和select * from table LIMIT 0,5一樣
2、分頁原理
所謂分頁顯示,也就是講數據庫中的結果集,一段一段顯示出來
怎麼分段,當前在第幾段 (每頁有幾條,當前再第幾頁)
前10條記錄:select * from table limit 0,10
第11至20條記錄:select * from table limit 10,10
第21至30條記錄:select * from table limit 20,10
分頁公式:
(當前頁數 – 1 )X 每頁條數 , 每頁條數
Select * from table limit ($Page- 1) * $PageSize, $PageSize
3、$_SERVER[“REQUEST_URI”]函數
預定義服務器變量的一種,所有$_SERVER開頭的都叫做預定於服務器變量。
REQUEST_URI的作用是取得當前URI,也就除域名外後面的完整的地址路徑。
例子:
當前頁為:;cid=22
echo $_SERVER[“REQUEST_URI”]
結果為:/home.php?id=23cid=22
4、parse_url()解析URL函數
parse_url() 是講URL解析成有固定鍵值的數組的函數
例子
$ua=parse_url(“”);
print_r($ua);
結果:
Array
(
[scheme] = http ;協議
[host] = hostname ;主機域名
[user] = username ;用戶
[pass] = password ;密碼
[path] = /path ;路徑
[query] = arg=value ;取參數
[fragment] = anchor ;
)
5、代碼實例
這個一個留言的分頁,分為3個部分,一個是數據庫設計,一個是連接頁面,一個是顯示頁面。
(1)設計數據庫
設計數據庫名為bbs,有一個數據表為message,裡面包含title,lastdate,user,content等字段,分別表示留言標題,留言日前,留言人,留言的內容
(2)連接頁面
?php
$conn = @ mysql_connect(“localhost”, “root”, “123456”) or die(“數據庫鏈接錯誤”);
mysql_select_db(“bbs”, $conn);
mysql_query(“set names ‘GBK'”); //使用GBK中文編碼;
//將空格,換行轉換為HTML可解析
function htmtocode($content) {
$content = str_replace(“\n”, “br”, str_replace(” “, ” “, $content)); //兩個str_replace嵌套
return $content;
}
//$content=str_replace(“‘”,”‘”,$content);
//htmlspecialchars();
?
(3)顯示頁面
?php
include(“conn.php”);
$pagesize=2; //設置每頁顯示2個記錄
$url=$_SERVER[“REQUEST_URI”];
$url=parse_url($url);
$url=$url[path];
$numq=mysql_query(“SELECT * FROM `message`”);
$num = mysql_num_rows($numq);
if($_GET){
$pageval=$_GET;
$page=($pageval-1)*$pagesize;
$page.=’,’;
}
if($num $pagesize){
if($pageval=1)$pageval=1;
echo “共 $num 條”.
” a href=$url?page=”.($pageval-1).”上一頁/a a href=$url?page=”.($pageval+1).”下一頁/a”;
}
$SQL=”SELECT * FROM `message` limit $page $pagesize “;
$query=mysql_query($SQL);
while($row=mysql_fetch_array($query)){
?
table width=500 border=”0″ cellpadding=”5″ cellspacing=”1″ bgcolor=”#add3ef”
tr bgcolor=”#eff3ff”
td標題:?php echo $row[title]?/td td時間:?php echo $row[lastdate]?/td
/tr
tr bgcolor=”#eff3ff”
td 用戶:?php echo $row[user]?/tdtd/td
/tr
tr
td內容:?php echo htmtocode($row[content]);?/td
/tr
br
/table
?php
}
?
方法3:
script
function viewpage(p){
if(window.XMLHttpRequest){
var xmlReq = new XMLHttpRequest();
} else if(window.ActiveXObject) {
var xmlReq = new ActiveXObject(‘Microsoft.XMLHTTP’);
}
var formData = “page=”+p;
xmlReq.onreadystatechange = function(){
if(xmlReq.readyState == 4){
document.getElementByIdx_x(‘content2’).innerHTML = xmlReq.responseText;
}
}
xmlReq.open(“post”, “hotel_list.php”, true);
xmlReq.setRequestHeader(“Content-Type”, “application/x-www-form-urlencoded”);
xmlReq.send(formData);
return false;
}
/script
腳本2:
header(“Content-Type:text/html;charset=GB2312”);
$pagesize=10;
//echo $_POST[‘page’];
$result = mysql_query(“Select count(DISTINCT hotelname) FROM “.TBL_HOTELS);
$myrow = mysql_fetch_array($result);
$numrows=$myrow[0];
$pages=intval($numrows/$pagesize);
if ($numrows%$pagesize)
$pages++;
if (isset($_POST[‘page’])){
$page=intval($_POST[‘page’]);
}
else{
//設置為第一頁
$page=1;
}
$first=1;
$prev=$page-1;
$next=$page+1;
$last=$pages;
//計算記錄偏移量
$offset=$pagesize*($page – 1);
//讀取指定記錄數
$result=mysql_query(“select `hotelname` , count( * ) from “.TBL_HOTELS.” GROUP BY `hotelname` order by id desc limit $offset,$pagesize”);
$num = mysql_num_rows($result);
while ($row = mysql_fetch_array($result,MYSQL_NUM)) {
$hotelname[] = $row[0];
$countpeople[] = $row[1];
}
for($a=0;$a$num;$a++)
{
//$result=mysql_query(“select count(title) from ” . TBL_Comments .” where `title`=\””.$title[$a].”\””);
//$row = mysql_fetch_row($result);
echo “TABLE style=\”MARGIN-BOTTOM: 20px\” cellSpacing=0 cellPadding=0 width=100% border=0\n”;
echo “TBODY\n”;
echo “TR\n”;
echo “TD style=\”PADDING-TOP: 5px\” vAlign=top align=left width=80\n”;
//rating_bar($title[$a],5);
echo “/TD\n”;
echo “TD style=\”PADDING-TOP: 5px\” align=left width=100%A title=$hotelname[$a] style=\”FONT-SIZE: 14px\” href=#$hotelname[$a]/A\n”;
echo “/TD/TR\n”;
echo ” TR\n”;
echo “TD/TD\n”;
echo “TD style=\”PADDING-LEFT: 0px\”\n”;
echo “IMG src=\”images/comment.gif\” border=0 推薦人數:($countpeople[$a]) |\n”;
echo “SPAN平均分:STRONG/STRONG (“.$count.”票) | 評論數:()/SPAN\n”;
echo “/TD/TR/TBODY/TABLE\n”;
}
echo “TABLE style=\”MARGIN-TOP: 30px\” cellSpacing=0 cellPadding=0 width=\”100%\””;
echo “border=0”;
echo “TBODYTRTD colSpan=3 height=20”;
echo “DIV align=center”;
echo “P align=leftFONT color=red第”.$page.”頁/總”.$pages.”頁 | 總”.$numrows.”條/FONT | “;
if ($page1) echo “a onclick=\”viewpage(“.$first.”)\” href=’#’首頁/a | “;
if ($page1) echo “a onclick=\”viewpage(“.$prev.”)\” href=’#’上頁/a | “;
if ($page$pages) echo “a onclick=\”viewpage(“.$next.”)\” href=’#’下頁/a | “;
if ($page$pages) echo “a onclick=\”viewpage(“.$last.”)\” href=’#’尾頁/a”;
echo “轉到第 INPUT maxLength=3 size=3 value=1 name=goto_page 頁 INPUT hideFocus onclick=\”viewpage(document.all.goto_page.value)\” type=button value=Go name=cmd_goto”;
echo “/P/DIV/TD/TR/TBODY/TABLE”;
php8和php7不兼容
主要是MySQL8.0默認是utfmb4的格式,PHP默認的是UTF8格式。
解決方法:需要將MySQL8.0默認格式設置為UTF8,身份認證的加密方式不兼容導致的,MySQL8.0中默認方式為caching_sha2_password。
新建用老版加密方式初始化密碼的用戶即可,然後在my.cnf中添加一行。
原創文章,作者:DTZVU,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/329883.html
微信掃一掃
支付寶掃一掃