Time of Update: 2018-12-03
根據《軟體設計師》教程的虛擬碼寫的;最麻煩的不是虛擬碼改成php,而是數組下標從0開始,及相應的下標判斷問題;帶著調試輸出一塊寫上<?php$v_arr = array(11,21,31,33,43,53,55,65);$w_arr = array(1,11,21,23,33,43,45,55);$n = count($w_arr );//測試輸出var_dump(bknap1(110));//var_dump(bound(139,89,7,110));function bound($v,
Time of Update: 2018-12-03
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: Unexpected character 'S' (code 83) in epilog; expected '<' at [row,col {unknown-source}]: [1,24]org.codehaus.xfire.fault.
Time of Update: 2018-12-03
左側為資料結構中的heap->free_buckets[ZEND_MM_NUM_BUCKETS*2];右側是segment,每次分配256個位元組+segment結構+zend_mm_block_info結構(segment結構能夠明確找到向作業系統申請記憶體後的指標,並有鏈表結構進行串聯heap->segments_list = segment)zend_mm_block_info結構明確說明這個塊用到的實際大小以及前一個塊的大小,並且有標記標註上一個塊的狀態(ZEND_MM_BL
Time of Update: 2018-12-03
最近調研了下php-cgi配置,發現網上文章真的是以訛傳訛,誤人子弟,不知道根據他們的配置方式是如何能讓web伺服器跑起來的調研php-cgi主要是想瞭解一下cgi的工作過程,當然基本概念還是老樣子,大家去搜文章看一下我先粘貼一下,方便大家閱讀什麼是CGI CGI全稱是“公用網關介面”(Common Gateway
Time of Update: 2018-12-03
http://localhost/index.php?action=newslist 1、<?php require(…這裡要載入公用的函數庫..)?>2、<?php include(“top.php”) ?> //專門建立一個top.php 用於解析網站頭部檔案 什麼叫頭部?就是<html><head>……</head>
Time of Update: 2018-12-03
Zend Optimizer用最佳化代碼的方法來提高PHP應用程式的執行速度。Zend
Time of Update: 2018-12-03
安裝WAMP所謂WAMP,是指在Windows系統(W)下安裝Apache網頁伺服器(A)以及MySQL資料庫(M)和PHP指令碼 引擎(P)而搭建起來的PHP網路伺服器環境,當然,在LAMP環境肯定是 比WAMP環境要好的,可是由於Windows的易用性,所以,我們在做前期開發或者測試某些CMS的時候,使用WAMP環境甚至很方便更實用一些。
Time of Update: 2018-12-03
眾所周知,當php.ini裡面的register_globals=on時,各種變數都被注入代碼,例如來自 HTML 表單的請求變數。再加上 PHP 在使用變數之前是無需進行初始化的。那麼就有可能導致不安全,假如有人惡意發出這麼一個get請求"http://yourdomain/unsafe.php?GLOBALS=",那麼就會清除$GLOBALS變數的值而導致不安全。所以我們可以這樣子寫[php]if ((isset($_REQUEST['GLOBALS']) OR isset($
Time of Update: 2018-12-03
http://devzone.zend.com/node/view/id/1021 簡介文中所用的教程需要您對PHP和PHP的解譯器(用C語言開發)有初步的瞭解.首先來確認為什麼我們需要寫出一個新的PHP擴充. 1. 由於不同語言之間的差別,導致這些以這些語言開發的共用庫不能夠由PHP直接調用,但我們確實很需要這些共用庫所已有的功能 2. 某些情況下,需要使PHP自身具有一些非常規的特性
Time of Update: 2018-12-03
在php擴充中,時常需要接受php類型的數組作為參數,php數組的參數都是zval類型的,並不適合在擴充中方便的使用,一般都要提前轉換成c或cpp中的資料類型。首先看一個轉換的例子:void convert_to_vector(const zval * vals, vector<string> &valList) ...{ // create the list to write HashPosition pos; zval
Time of Update: 2018-12-03
php擴充中使用者自訂的方法有兩大類:一類是函數(獨立存在),一類是方法(依附於類和對象)。本文先說明下函數。 構造一個新的函數的原理如下:聲明並實現,實現完成後在某些特定的地方寫代碼告訴Zend引擎(註冊)。完成這兩步後就可以了。 假如需要實現一個foo()的方法,可以直接在php指令碼中調用: php -r "foo();" 第一步:聲明和實現 聲明和實現使用PHP_FUNCTION(foo){...}或者ZEND_FUNTION(foo){...},
Time of Update: 2018-12-03
_once是要比非once要慢的,因為_once添加了一些條件判斷,在zend的內部hash表中進行尋找,只有當尋找不到的時候才進行包含,代碼部分見 http://cvs.php.net/viewvc.cgi/ZendEngine2/zend_vm_def.h?view=markup
Time of Update: 2018-12-03
在php程式中使用mb_convert_encoding()方法進行字元編碼轉換大家都很熟悉了,平時也在大量的使用。而且在一般情況下該方法也表現的足夠好,值得表揚。但在一個項目中我們需要使用它進行UTF8到GBK的轉換,在轉換一些特殊字元時發現了一個不大不小的問題。具體表現為mb把在utf8可編碼的字元而在gbk中不可編碼的字元都轉成了/0x00/0x80,這樣就導致轉換後的gbk字元是有問題的。
Time of Update: 2018-12-03
作為DSO模式加入apache的啟動列表後,都會通過AddType application/x-httpd-php .php 命令把對以php尾碼的檔案請求交由libphp5.so進行處理。比如對http://www.example.org/foo/1.php的請求會交由libphp5.so進行處理,這個DSO會對1.php進行php源碼的編譯和執行,產生最終的html回應檔交換給apache,進而返還給瀏覽器。
Time of Update: 2018-12-03
前幾天新宸分享了PHP Script的lifecycle, 由於那天需要參加公司的培訓,未去參加新宸的LifeCycle的分享。上一年有段時間很是癡迷於PHP的擴充,想弄清楚apache對PHP的擴充是如何調用和執行的。鑽研了好久,有了一個大致的概念,但沒有新宸這樣做一個比較清楚的總結,感謝新宸的ppt。
Time of Update: 2018-12-03
If a method can be static, declare it static. Speed improvement is by a factor of 4.Avoid magic like __get, __set, __autoloadrequire_once() is expensiveUse full paths in includes and requires, less time spent on resolving the OS
Time of Update: 2018-12-03
在擴充中,有時候需要使用在php.ini中設定的值,在PHP的擴充中 使用ini變數的方式如下:首先使用: PHP_INI_BEGIN() PHP_INI_ENTRY("foo_bar.global_value", "42", PHP_INI_ALL, NULL) PHP_INI_ENTRY("foo_bar.global_string", "foobar", PHP_INI_ALL, NULL)
Time of Update: 2018-12-03
PHP的對象銷毀機制比較強大,在程式開發過程中可以肆意的使用新的變數或者new一個對象而不用擔心記憶體回收的問題,一切都由Zend代勞了。這在多種情況下是毫無問題的。但是當使用php指令碼進行大批量資料轉換的時候,需要注意這一點。 Zend對於變數的銷毀是在指令碼執行完之後進行,它不具備類似java的那種執行期間的gc機制,因此當需要在迴圈中不斷的new一個對象時,需要注意數量級的問題。如果迴圈中new的過多,則同樣會導致out of memory的問題發生.
Time of Update: 2018-12-03
PHP中內建了相當多的加密的方法,這裡我們來看一下mcrypt擴充的使用方式。(也是在工作中需要用這個東西加密訪問使用者的Cookie的值,認真的學習了這個方面的內容。) 1.簡介 Mcrypt是PHP的一個擴充,完成了常用密碼編譯演算法的封裝。其實該擴充是對mcrypt標準類庫的封裝,mcrypt完成了相當多的常用密碼編譯演算法,如DES, TripleDES, Blowfish (default), 3-WAY, SAFER-SK64, SAFER-SK128,
Time of Update: 2018-12-03
PHP_ARG_WITH或者PHP_ARG_ENABLE指定了PHP模組的工作方式,任選一種,我選擇的是WITHPHP_REQUIRE_CXX用於指定這個擴充用到了C++PHP_SUBST(EXTERN_NAME_SHARED_LIBADD)用於說明這個擴充編譯成動態連結程式庫的形式PHP_ADD_LIBRARY(stdc++,"",SYSFILE_SHARED_LIBADD)用於將標準C++庫連結進入擴充PHP_NEW_EXTENSION用於指定有哪些源檔案應該被編譯,檔案和檔案之間用空格隔