1. 網上找的游戲php源代碼如何才能在本地測試,求詳細步驟!!!
先下載一個集成環境,下載的源碼打開看下
是不是有說明文檔,集成環境用phpstudy這
個可以測試
2. php如何進行單元測試
何為單元測試:
指對軟體中的基本單元進行測試,如函數、方法等,以檢查其返回值或行為是否符合預期;實際中軟體是很復雜的,由許多組件構成,執行流程連貫在一起,要進行單元片段的測試,就需要為其提供執行上下文(或者說參數)和環境(比如打樁模擬一些對象)來運行,並監控其行為和返回值,為此我們就需要寫出做這件事情的程序代碼,這樣的代碼叫做測試用例。
許多測試用例有機結合在一起形成一個整體的測試,又叫做測試套件,被測試的程序代碼叫做生產代碼。phpunit這個軟體就是用來幫助我們寫測試用例並進行測試的。
php的單元測試:phpunit
在其官網有詳細教程,這里介紹一些補充內容。
首先要明白phpunit軟體本身就是由php語言實現,其使用是通過命令行進行的,並不是通過瀏覽器訪問
明白這一點很重要,許多新人被卡在這里,很基礎也很簡單,但似乎沒怎麼被提及。
在官網下載後得到一個phar文件,同時下載phpunit使用文檔,按照裡面的安裝方法進行安裝,之後在命令行輸入以下命令:
phpunit --help
如果顯示出了幫助信息即安裝成功,在命令行當前目錄下建立一個測試用例為yunke.php,內容如下:
<?phpuse PHPUnit\Framework\TestCase;class yunkeTest extends TestCase{public function testPushAndPop(){$stack = [];$this->assertEquals(0, count($stack));array_push($stack, 'foo');$this->assertEquals('foo', $stack[count($stack) - 1]);$this->assertEquals(1, count($stack));$this->assertEquals('foo', array_pop($stack));$this->assertEquals(0, count($stack));}}?>
然後在命令行輸入以下命令:
phpunit yunke
顯示如下內容:
PHPUnit 5.7.12 by Sebastian Bergmann and contributors.. 1 / 1 (100%)Time: 159 ms, Memory: 7.00MBOK (1 test, 5 assertions)
恭喜,你已經成功運行了一個單元測試。
3. php 代碼如何調試
開啟Apache伺服器以及MY_SQL資料庫。
在PHP集成環境的安裝目錄「www」文件夾中創建我們需要用到的php文件,1.php.
用Notepad++打開1.php文件,然後輸入PHP的語言格式:
<?php ?>
輸入標準的輸出語言:
<?php
echo "Hello world !" //輸出Hello world 語言。 echo 是列印的意思
?>
在網頁上輸入localhost:8080/1.php可以調試我們自己寫的php代碼
PHP的簡單運算,用$來定義應用數據,輸出也是一樣。
<?php
$sum=1;
$total=1.22;
$sum=$total+$sum;
echo $sum ?>
4. 整套php源代碼在本地怎麼測試運行
那得看你這個項目是用php的框架寫的還是原生php寫的,如果是用框架寫的,可以寫個配置域名或者ip來指定訪問這個項目的入口文件,如果是用原生php寫的,就可以不用這么麻煩,所有php文件都可以通過localhost加文件名來訪問,還有一點就是還要確定你這個項目的資源文件,例如圖片、css文件、js文件,不過這些看你訪問入口文件就知道了,一步一步修改配置即可,希望對你有幫助
5. PHP怎麼測試
如果只是簡單的測試的話,可以用echo或者var_mp列印信息來查看,當然如果你用的是zend或者eclipse這樣的編輯器的話,可以加上zendbug來調試信息
php100用的這個eclipse可以一保存就查看信息,看下面的提示就知道錯誤在哪裡了。下載地址:http://www.php100.com/html/download/tools/2009/1203/3603.html
6. 針對PHP代碼的網站,如何進行白盒測試需要什麼工具配合
用PhpUnit吧
PHPUnit是一個輕量級的PHP測試框架。它是在PHP5下面對JUnit3系列版本的完整移植,是xUnit測試框架家族的一員(它們都基於模式先鋒Kent Beck的設計)。
單元測試是幾個現代敏捷開發方法的基礎,使得PHPUnit成為許多大型PHP項目的關鍵工具。這個工具也可以被Xdebug擴展用來生成代碼覆蓋率報告 ,並且可以與phing集成來自動測試,最後它還可以和Selenium整合來完成大型的自動化集成測試。
7. 怎樣調試PHP頁面中的javascript代碼
1、再火狐瀏覽器裡面打開你需要戚雹調適的頁面
2、右鍵查看元素
3、然後就可以畢核看到
在這就可以看到哪個js哪個地方有問高數帆題了
8. 怎樣在本地測試php代碼
准備工作 首先要下載如下軟體,推薦到官網下載,如果你是像我一樣只是測試,那麼到skycn.com下載吧,這樣比較快。
Apache http://httpd.apache.org/
最流行的HTTP伺服器軟體之一。快速、可靠、可通過簡單的API擴展,Perl/Python解釋器可被編譯到伺服器中,完全免費,完全源代碼開放。
我下載的是for Windows版本,目前最新版本是:2.0.54
PHP http://www.php.net/
PHP 是一種 HTML 內嵌式的語言。而PHP獨特的語法混合了 C、Java、Perl 以及 PHP 式的新語法。它可以比 CGI 或者 Perl 更快速的執行動態網頁。
我下載的是for Windows版本,目前最新版本是:5.0.4
MySQL http://www.mysql.com/
是一個多線程的,結構化查詢語言(SQL)資料庫伺服器。SQL 在世界上是最流行的資料庫語言。MySQL 的執行性能非常高,運行速度非常快,並非常容易使用。
我下載的是for Windows版本,目前最新版本是:5.0.4 Beta
phpMyAdmin http://www.phpmyadmin.net/
phpMyAdmin 是一個用PHP編寫的,可以通過互聯網控制和操作MySQL。通過phpMyAdmin可以完全對資料庫進行操作。
我下載的是for Windows版本,目前最新版本是:2.6.2-pl1
安裝apache和PHP
下面是我的安裝記錄:
選擇80埠,將apache安裝在 e:\apache下。
配置apache里的httpd.conf文件(conf目錄下)
找到 DocumentRoot E:/apache/Apache2/htdocs 將其改為WEB目錄E:/htdocs
找到 DirectoryIndex index.html index.html.var 在後面加入 index.htm index.php default.php default.html
選擇模塊化模式安裝
找到 #LoadMole ssl_mole moles/mod_ssl.so 這行,在此行後加入一行
LoadMole php5_mole e:/php/php5apache2.dll
找到 AddType application/x-gzip .gz .tgz 這行,在此行後加入一行
AddType application/x-httpd-php .php
將php-5.0.4-Win32.zip里內容解壓到e:\php里,找到php.ini-recommended,重命名為php.ini並拷貝到windows目錄下。
NTFS上記得給伺服器開PHP.ini的讀許可權。
查找extension_dir後面的改為e:/php/ext
查找Windows Extensions,把下面有一排的;extension=php_***.dll的分號去掉,就是支持組件了。我把 extension=php_gd2.dll extension=php_mbstring.dll extension=php_mysql.dll 的分號去掉了。
php5默認不支持mysql了,所以要為他添加支持,除了extension=php_mysql.dll去分號之外,在php目錄里有個libmysql.dll文件,把它復制到系統的system32文件夾下,復制php.ini到windows目錄下。
此時PHP環境基本已經配置成功
在WEB根目錄里建一個名為test.php的文件內容如下
<? echo phpinfo(); ?>
重新啟動apache服務,用瀏覽器打開 http://localhost/test.php
如果可以看到php配置輸出信息就成功了
安裝mysql
將mysql安裝到指定目錄,然後安裝程序會引導你一步步配置。不過奇怪的是最後任務欄沒有出現Mysql的圖標。
修改mysql資料庫的root密碼
用cmd進入命今行模式輸入如下命令: ( 注: d:\mysql 為mysql安裝目錄)
cd d:\mysql\bin
mysqladmin -u root -p password 123456
回車出現
Enter password: ( 注:這是叫你輸入原密碼. 剛安裝時密碼為空,所以直接回車即可)
此時mysql 中賬號 root 的密碼 被改為 123456 安裝完畢
配置php.ini並測試mysql
找到extension_dir = ./ 改為 extension_dir = e:/php/ext
找到
;extension=php_mysql.dll
將';'去掉改為
extension=php_mysql.dll
找到
;session.save_path = /tmp
將';'去掉 設置你保存session的目錄,如
session.save_path = e:/php/session_temp
重啟apache服務
在Web根目錄下建立testdb.php文件內容如下:
<?php
$link=mysql_connect('localhost','root','123456');
if(!$link) echo fail;
else echo success;
mysql_close();
?>
用瀏覽器打開http://localhost/testdb.php 如果輸出success就OK了
phpmyadmin的安裝配置
將phpMyAdmin-V2.6.2-pl1.zip解壓到WEB根目錄中去,重命名文件夾為phpmyadmin或其它
打開phpmyadmin 目錄中的 config.inc.php
找到
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '123456';
分別填上用戶名和密碼
9. PHP的性能探討和測試
1.緣起
關於PHP,很多人的直觀感覺是PHP是一種靈活的腳本語言,庫類豐富,使用簡單,安全,非常適合WEB開發,但性能低下。PHP的性能是否真的就如同大家的感覺一樣的差呢?本文就是圍繞這么一個話題來進陵搏行探討的。從源碼、應用場景、基準性能、對比分析等幾個方面深入分析PHP之性能問題,並通過真實的數據來說話。
2.從原理分析PHP性能
從原理分析PHP的性能,主要從以下幾個方面:內存管理、變數、函數、運行機制來進行分析。
2.1內存管理
類似Nginx的內存管理方式,PHP在內部也是基於內存池,並且引入內存池的生命周期概念。在內存池方面,PHP對PHP腳本和擴展的所有內存相關操作都進行了託管。對大內存和小內存的管理採用了不同的實現方式和優化,具體可以參考以下文檔:
2.2變數
總所周知,PHP是一種弱變數類型的語言,所以在PHP內部,所有的PHP變數都對應成一種類型Zval,其中具體定義如下:
在變數方面,PHP做了大量的優化工作,比如說Reference counting和 on writer機制。這樣能夠保證內存使用上的優化,並且減少內存拷貝次數(請參考
2.3函數
在PHP內部,所有的PHP函數都回轉化成內部的一個函數指針。比如說擴展中函數
ZEND_FUNCTION(my_function);//類似functionmy_function(){}
在內部展開後就會是一個函數
voidzif_my_function(INTERNAL_FUNCTION_PARAMETERS);
voidzif_my_function(intht,
zval*return_value,
zval*this_ptr,
intreturn_value_used,
zend_executor_globals*executor_globals);
從這個角度來看,PHP函數在內部也是對應一個函數指針。
2.4運行機制
在話說PHP性能的時候,很多人都會說「C/C++是編譯型,JAVA是半編譯型,PHP是解釋型」。也就是說PHP是先動態解析再代碼運行的,所以從這個角度來看,PHP性能必然很差。
的確,從PHP腳本運行來輸出,的確是一個動態解析再代碼運行的過程。具體來說,PHP腳本的運行機制如下圖所示:
PHP的運行階段也分成三個階段:
Parse。語法分析階段。
Compile。編譯產出opcode中間碼。
Execute。運行,動態運行進行輸出。
所以說,在PHP內部,本身也是存在編譯的過程。並且據此產生了大量的opcode cache工具,比如說apc、eacc、xcache等等。這些opcode cache在生產環境基本上在標配。基於opcode cache,能到做到「PHP腳本編譯一次,多次運行」的效果。從這點上,PHP就和JAVA的半編譯機制非常類似。
所以,從運行機制上來看,PHP的運行模式和JAVA是非常類似的,都是先產生中間碼,然後運行在不同虛擬機上。
2.5動態運行
從上面的幾個分析來看,PHP在內存管理、變數、函數、運行機制等幾個方面都做了大量的工作,所以從原理來看,PHP不應該存在性能尺御祥問題,性能至少也應該和Java比較接近。
這個時候就不得不談PHP動態語言的特性所帶來的性能問題了,由於PHP是動態運行時,所以所有的變數、函數、對象調用、作用域實現等等都是在執行階段中才確定的。這個從根本上決定了PHP性能中很難改變的一些東西:在C/C++等拆蔽能夠在靜態編譯階段確定的變數、函數,在PHP中需要在動態運行中確定,也就決定了PHP中間碼不能直接運行而需要運行在Zend Engine上。
說到PHP變數的具體實現,又不得不說一個東西了:Hashtable。Hashtable可以說在PHP靈魂之一,在PHP內部廣泛用到,包含變數符號棧、函數符號棧等等都是基於hashtable的。
以PHP變數為例來說明下PHP的動態運行特點,比如說代碼:
?php
$var=「hello,」;
?
該代碼的執行結果就是在變數符號棧(是一個hashtable)中新增一個項
當要使用到該變數時候,就去變數符合棧中去查找(也就是變數調用對出了一個hash查找的過程)。
同樣對於函數調用也基本上類似有一個函數符號棧(hashtable)。
其實關於動態運行的變數查找特點,在PHP的運行機制中也能看出一些。PHP代碼通過解釋、編譯後的流程下圖:
從上圖可以看出,PHP代碼在compile之後,產出的了類符號表、函數符號表、和OPCODE。在真正執行的時候,zend Engine會根據op code去對應的符號表中進行查找,處理。
從某種程度上,在這種問題的上,很難找到解決方案。因為這是由於PHP語言的動態特性所決定的。但是在國內外也有不少的人在尋找解決方案。因為通過這樣,能夠從根本上完全的優化PHP。典型的列子有facebook的hiphop。
2.6結論
從上面分析來看,在基礎的內存管理、變數、函數、運行機制方面,PHP本身並不會存在明顯的性能差異,但由於PHP的動態運行特性,決定了PHP和其他的編譯型語言相比,所有的變數查找、函數運行等等都會多一些hash查找的CPU開銷和額外的內存開銷,至於這種開銷具體有多大,可以通過後續的基準性能和對比分析得出。
因此,也可以大體看出PHP不太適合的一些場景:大量計算性任務、大數據量的運算、內存要求很嚴格的應用場景。如果要實現這些功能,也建議通過擴展的方式實現,然後再提供鉤子函數給PHP調用。這樣可以減低內部計算的變數、函數等系列開銷。
3.基準性能
對於PHP基準性能,目前缺少標準的數據。大多數同學都存在感性的認識,有人認為800QPS就是PHP的極限了。此外,對於框架的性能和框架對性能的影響很沒有響應的權威數字。
本章節的目的是給出一個基準的參考性能指標,通過數據給大家一個直觀的了解。
具體的基準性能有以下幾個方面:
1.裸PHP性能。完成基本的功能。
2.裸框架的性能。只做最簡單的路由分發,只走通核心功能。
3.標准模塊的基準性能。所謂標准模塊的基準性能,是指一個具有完整服務模塊功能的基準性能。
3.1環境說明
測試環境:
Uname -aPnux db-forum-test17.db01..com 2.6.9_5-7-0-0 #1 SMP Wed Aug 12
17:35:51 CST 2009 x86_64 x86_64 x86_64 GNU/Pnux
Red Hat Enterprise Pnux AS release 4 (Nahant Update 3)
8 Intel(R) Xeon(R) CPU E5520 @ 2.27GHz
軟體相關:
Nginx:nginx version: nginx/0.8.54 built by gcc 3.4.5 20051201 (Red Hat 3.4.5-2)
Php5:(採用php-fpm)
PHP 5.2.8 (cP) (built: Mar 6 2011 17:16:18)
Copyright (c) 1997-2008 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2008 Zend Technologies
with eAccelerator v0.9.5.3, Copyright (c) 2004-2006 eAccelerator, by eAccelerator
bingo2:
PHP框架。
其他說明:
目標機器的部署方式:nginx-php-fpm-php腳本。
測試壓力機器和目標機器獨立部署。
3.2裸PHP性能
最簡單的PHP腳本。
?php
require_once『./actions/indexAction.php』;
$objAction=newindexAction();
$objAction-init();
$objAction-execute();
?
Acitons/indexAction.php裡面的代碼如下
?php
classindexAction
{
pubPcfunctionexecute()
{
echo『hello,world!』;
}
}
?
通過壓力工具測試結果如下:
3.3裸PHP框架性能
為了和3.2的對比,基於bingo2框架實現了類似的功能。代碼如下
?php
require_once『Bingo/Controller/Front.php』;
$objFrontController=Bingo_Controller_Front::getInstance(array(『actionDir』=『./actions』,));
$objFrontController-dispatch();
壓力測試結果如下:
從該測試結果可以看出:框架雖然有一定的消耗,但對整體的性能來說影響是非常小的。
3.4標准PHP模塊的基準性能
所謂標准PHP模塊,是指一個PHP模塊所必須要具體的基本功能:
路由分發。
自動載入。
LOG初始化Notice日誌列印。所以的UI請求都一條標準的日誌。
錯誤處理。
時間校正。
自動計算每個階段耗時開銷。
編碼識別編碼轉化。
標准配置文件的解析和調用
採用bingo2的代碼自動生成工具產生標準的測試PHP模塊:test。
測試結果如下:
3.5結論
從測試數據的結論來看,PHP本身的性能還是可以的。基準性能完全能夠達到幾千甚至上W的QPS。至於為什麼在大多數的PHP模塊中表現不佳,其實這個時候更應該去找出系統的瓶頸點,而是簡單的說OK,PHP不行,那我們換C來搞吧。(下一個章節,會通過一些例子來對比,採用C來處理不見得有特別的優勢)
通過基準數據,可以得出以下幾個具體的結論:
1.PHP本身性能也很不錯。簡單功能下能夠達到5000QPS,極限也能過W。
2.PHP框架本身對性能影響非常有限。尤其是在有一定業務邏輯和數據交互的情況下,幾乎可以忽略。
3.一個標準的PHP模塊,基準性能能夠達到2000QPS(80 cpu idle)。
4.對比分析
很多時候,大家發現PHP模塊性能不行的時候,就來一句「ok,我們採用C重寫吧」。在公司內,採用C/C++來寫業務邏輯模塊的現象到處都有,在前幾年甚至幾乎全部都是採用C來寫。那時候大家寫的真是一個痛苦:調試難、敏捷不要談。
10. 怎麼使用PHPUnit對基於ThinkPHP的代碼單元測試
用的tp3.2.3,在框架目錄的THinkPHP/Library/Think/Think.class.php的120行,App::run()改為!APP_PHPUNIT&&App::run();,在Home的model目錄創建一個test.php(名字隨便),寫入
_Extensions_Database_TestCase{
/**
*returnPHPUnit_Extensions_Database_DB_IDatabaseConnection
*/
publicfunctiongetConnection()
{
$pdo=newPDO('mysql:host=localhost;dbname=test','root','root');
return$this->createDefaultDBConnection($pdo,'test');
}
/**
*returnPHPUnit_Extensions_Database_DataSet_IDataSet
*/
publicfunctiongetDataSet()
{
return$this->createXMLDataSet(dirname(__FILE__).'/db.xml');
}
publicfunctiontestGetValue()
{
//啟動thinkphp
define('APP_PATH',dirname(__FILE__).'/../../../Application/');
//設置標志,防止程序啟動,只要載入段爛了框架歲燃橋和類就行
define('APP_PHPUNIT',true);
//引入ThinkPHP入口文件
require_oncedirname(__FILE__).'乎猛/../../../ThinkPHP/ThinkPHP.php';
$testModel=newHomeModelTestModel();
$this->assertEquals(2,$testModel->getValue(1));
}
}