下面我們來示範如何使用這個擴充包自動為專案產生API文檔,其原理是透過掃描routes.php為指定路由產生相應API文檔,例如我們的路由文件定義了一個路由如下:Route::get('api/v1/index', 'ApiController@index'); 這個路由對應的控制器方法定義如下:/** * API首页 * * 欢迎来到Laravel学院,Laravel学院致力于提供优质Laravel中文学习资源 * */ public function index() { }需要指出的是,Laravel API 產生器透過action方法上的註解產生API 對應的描述資訊。我們使用擴充包提供的api:generate命令來實現API 文檔生成:php artisan api:generate --routePrefix=api/v1/*該命令的意思是掃描路由中匹配api/v1/*的規則並為相應控制器方法生成API文檔,
<?php function randpw($len=8,$format='ALL'){ $is_abc = $is_numer = 0; $password = $tmp =''; switch($format){ case 'ALL': $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; case 'CHAR': $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; break; case 'NUMBER': $chars='0123456789'; break; default : $chars='ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; break; } // www.jb51.net mt_srand((double)microtime()*1000000*getmypid()); while(strlen($password)<$len){ $tmp =substr($chars,(mt_rand()%strlen($chars)),1); if(($is_numer <> 1 && is_numeric($tmp) && $tmp > 0 )|| $format == 'CHAR'){ $is_numer = 1; } if(($is_abc <> 1 && preg_match('/[a-zA-Z]/',$tmp)) || $format == 'NUMBER'){ $is_abc = 1; } $password.= $tmp; } if($is_numer <> 1 || $is_abc <> 1 || empty($password) ){ $password = randpw($len,$format); } return $password; } for($i = 0 ; $i < 10; $i++){ echo randpw(8,'NUMBER'); echo "<br>"; }無論是Web應用,或是WAP或是行動應用,隨機數都有其用武之地。在最近接觸的幾個小專案中,我也常常需要和隨機數或者隨機數組打交道,給大家帶來的就是RandomLib-master生成隨機數的PHP庫這個庫很好用,大家如果需要可以直接下載。
[php] view plain copy <?php class StackTest extends PHPUnit_Framework_TestCase { public function testEmpty() { $stack = array(); $this->assertEmpty($stack); return $stack; } /** * @depends testEmpty */ public function testPush(array $stack) { array_push($stack, 'foo'); $this->assertEquals('foo', $stack[count($stack)-1]); $this->assertNotEmpty($stack); return $stack; } /** * @depends testPush */ public function testPop(array $stack) { $this->assertEquals('foo', array_pop($stack)); $this->assertEmpty($stack); } } ?>1. 什麼是單元測試? 【百度百科】單元測試是對軟體中的最小可測單元進行檢查和驗證。 是開發者寫的一小段程式碼,用來檢驗被測程式碼的一個很小的、很明確的功能是否正確。 2. 作用是什麼? 【廢話】檢查軟體、程式的可行性,穩定性。 透過單元測試能夠避免在迭代、升級等過程中,引起重複的、多餘的問題。 避免在別人修改程式碼的時候,影響到你的邏輯3. 哪些程式需要寫單元測試(PHP)? 【理想】理想的單元測試應覆蓋程式中所有可能的路徑,包括正確的和錯誤的路徑,個單元測試通常會覆寫一個函數或方法中的一個特定路徑。 【現實】model、helper、controller中的函式必須測試、路徑覆寫到所有可能性
#!/usr/bin/env php <?php /** * phpDocumentor * * PHP Version 5.3 * * @copyright 2010-2013 Mike van Riel / Naenius (http://www.naenius.com) * @license http://www.opensource.org/licenses/mit-license.php MIT * @link http://phpdoc.org */trigger_error('phpDocumentor2 should be run from the phpdoc file, not phpdoc.php', E_USER_DEPRECATED);require_once __DIR__.'/php';#docdoct #phpDocumentor 2是一個可以分析php原始碼和註解區塊並產生文件的程式。基於phpdocumentor 1和javadoc啟發而來,它持續創新的使用了一些新技術和支援php的新特性。 phpDocumentor 2的特點: 相容php5.3,全面支援命名空間和閉包等。 辨識支援任何tag,以及一些追加的 (例如 @link). 更快的處理速度。較 phpDocumentor 1在Zend Framework 下的處理耗時有了明顯的減少。 低記憶體消耗,小型中大型工程的記憶體消耗分別低於20MB,40MB和100MB。 增量解析。如果你有之前執行phpdoc取得的structure.xml文件,那麼小修改後重新產生文件的速度將會提升80%。 簡單就能建立模板,只要1小步驟和編輯3個檔案。 相容1代的命令列。例如 --directory, --file and --target 兩步驟式處理。先產生structure文件,你可以根據這個文件來格式化相關信息,用自己的工具來展現信息!
Samsui 是一個用來建立對建立你的應用程式測試資料有用的 PHP 物件庫。透過 Samsui,你可以快速建立原型應用,產生你測試原型所需的資料。 use Samsui\Factory; $factory = new Factory(); // define an object quickly $factory->define('person') ->sequence('personId') ->attr('firstName', 'James') ->attr('lastName', 'Clark') ->attr('email', function ($i, $o) { return strtolower($o->firstName . '.' . $o->lastName . '@example.com'); }) ->attr('createdTime', function () { return time(); });#
<?php session_start(); header("Content-type:image/png"); $img_width=100; $img_height=20; srand(microtime()*100000); for($i=0;$i<4;$i++) { $new_number.=dechex(rand(0,15)); } $_SESSION[check_auth]=$new_number; $new_number=imageCreate($img_width,$img_height);//创建图象 ImageColorAllocate($new_number,255,255,255); //设置背景色为白色 for($i=0;$i<strlen($_SESSION[check_auth]);$i++) { $font=mt_rand(3,5); $x=mt_rand(1,8) + $img_width*$i/4; $y=mt_rand(1,$img_height/4); $color=imageColorAllocate($new_number,mt_rand(0,100),mt_rand(0,150),mt_rand(0,200));//设置字符颜色 imageString($new_number,$font,$x,$y,$_SESSION[check_auth][$i],$color);//输出字符 } ImagePng($new_number); ImageDestroy($new_number); ?>GD函式庫是PHP進行圖像操作一個很強大的函式庫。 先在php.ini增加一行參考:extension=php_gd2.dll#重啟apache。做一個測試頁 var_dump(gd_info());輸出資料表示GD庫引用成功。 表單auth.html#
<?php /** * A Compatibility library with PHP 5.5's simplified password hashing API. * * @author Anthony Ferrara <ircmaxell@php.net> * @license http://www.opensource.org/licenses/mit-license.html MIT License * @copyright 2012 The Authors */ namespace { if (!defined('PASSWORD_BCRYPT')) { /** * PHPUnit Process isolation caches constants, but not function declarations. * So we need to check if the constants are defined separately from * the functions to enable supporting process isolation in userland * code. */ define('PASSWORD_BCRYPT', 1); define('PASSWORD_DEFAULT', PASSWORD_BCRYPT); define('PASSWORD_BCRYPT_DEFAULT_COST', 10); }相信很多PHP開發者在最先接觸PHP的時候,處理密碼的首選加密函數可能就是MD5了,我當時就是這樣的:$password = md5($_POST["password "]);上面這段程式碼是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受歡迎了,因為它的加密演算法實在是顯得有點簡單了,而且很多破解密碼的站點都存放了很多經過MD5加密的密碼字符串,所以這裡我是非常不提倡還在單單使用MD5來加密使用者的密碼的。 SHA256 和 SHA512其實跟前面的MD5同期的還有一個SHA1加密方式的,不過也是演算法比較簡單,所以這裡就一筆帶過吧。而這裡即將要說到的SHA256 和 SHA512都是來自於SHA2家族的加密函數,看名字可能你就猜的出來了,這兩個加密方式分別產生256和512位元長度的hash字符串。
<?php use Mockery\ExpectationInterface; use Mockery\Generator\CachingGenerator; use Mockery\Generator\Generator; use Mockery\Generator\MockConfigurationBuilder; use Mockery\Generator\StringManipulationGenerator; use Mockery\Loader\EvalLoader; use Mockery\Loader\Loader; use Mockery\Matcher\MatcherAbstract; class Mockery { const BLOCKS = 'Mockery_Forward_Blocks'; ar \Mockery\Container protected static $_container = null; protected static $_config = null;這個工具可以透過簡單的設定達到快速模擬第三方HTTP服務端介面的作用,取代先前要手寫servlet程式碼再放到tomcat下的過程。 使用前請仔細閱讀工具使用指南: 1、安裝jdk1.6以上的版本; 2、GUI包含三部分,連接埠設置,URL和response檔案路徑設置,控制台; 3、連接埠設定為需要監聽的本地的端口,範圍是1-65532; 4、URL和response檔案路徑設定是一個2列9行的表格,每行包括兩個配置,兩個配置從名字上都很好理解,填寫正確即可; #5、注意:當輸入完成後,需要點擊表格的其他行取消滑鼠焦點,這樣工具才能識別到當前的輸入框被修改,OSX系統下複製貼上的快捷鍵依然是ctr c/v; 6、控制台分為兩部分,三個按鈕和一個文本顯示區域,按鈕的作用從名稱上都能理解,文字顯示區域顯示收到的HTTP請求的URL,頭域,訊息體,右鍵有清空按鈕; 7、需要監聽多個連接埠複製多個jar檔開啟即可。
<?php namespace GenPhrase; use GenPhrase\WordlistHandler\WordlistHandlerInterface as WordlistHandlerInterface; use GenPhrase\WordlistHandler\Filesystem as WordlistHandler; class Password { protected $_wordlistHandler = null; protected $_wordModifier = null; /** * @var RandomInterface */ protected $_randomProvider = null; /** * @var string The separator characters. Must be single-byte characters. */ protected $_separators = '-_!$&*+=23456789'; /** * @var bool Whether to _always_ use separator characters or not (even if using them would not "make sense"). */使用前請仔細閱讀工具使用指南: 1、安裝jdk1.6以上的版本; 2、GUI包含三部分,連接埠設置,URL和response檔案路徑設置,控制台; 3、連接埠設定為需要監聽的本地的端口,範圍是1-65532; 4、URL和response檔案路徑設定是一個2列9行的表格,每行包括兩個配置,兩個配置從名字上都很好理解,填寫正確即可; 5、注意:當輸入完成後,需要點擊表格的其他行取消滑鼠焦點,這樣工具才能識別到目前的輸入框被修改,OSX系統下複製貼上的快速鍵仍是ctr c/v; 6、控制台分為兩部分,三個按鈕和一個文字顯示區域,按鈕的作用從名稱上都能理解,文字顯示區域顯示收到的HTTP請求的URL,頭域,訊息體,右鍵有清空按鈕; 7、需要監聽多個連接埠複製多個jar檔案開啟即可。
require_once '/path/to/HTMLPurifier.auto.php';#根據ThinkPHP的規範,對於第三方擴展,不符合ThinkPHP開發規範的,需要將HTMLPurifier放入Library/Vendor目錄中。然後我們可以在方法中透過下面方法將HTMLPurifier.auto.php引入框架程式中:vendor('htmlpurifier.library.HTMLPurifier#auto');不過這裡我使用的ThinkPHP 3.2.1,發現這個方法只能使用在函數中,對於控制器類別中這樣引入是無法正確辨識的。也就是說,我們只能在common/function.php檔案中引用。 建立HTMLPurifier物件並實作對富文本的過濾$config = HTMLPurifier_Config::createDefault(); $purifier = new HTMLPurifier($config); $clean_html = $purifier->purify($dirty_html);如何對HTMLPurifer的過濾器進行配置要使用HTMLPurifier,重點還是在如何進行設定。對於上面的程序,我們透過createDefault()方法創建了一個預設的配置物件。我們如果要修改配置的話,可以透過set方法來進行配置設置,方法如下:$config->set('config_object', value, a=null);第一個參數就是需要配置的屬性,第二個參數就是屬性的值,第三個參數具體是做什麼用的我也還沒搞明白,不過一般都沒有用過,等有時間了再慢慢兒來研究研究。 HTMLPurifier的配置屬性可以透過其網站查詢到配置屬性選擇HTMLPurifier的設定檔主要是兩層分類,大類分Attr(屬性)、HTML (html標籤)、AutoFormat(自動格式)、CSS(css配置)、Output(輸出配置)…小類選擇透過大類名稱加.加小類名稱可以完成。 例如我要配置允許的html標籤,比如說p標籤和a標籤,可以如下配置$config->set('HTML.Allowed', 'p,a');屬性值的選擇在官方文件中,點擊一個屬性後,可以看到這個屬性的解釋,會告訴你這個屬性的值的類型(Type)是String、Int、Array、Boolen……#接著還會告訴你這個屬性的預設值,例如是NULL還是true還是false等。這個值的格式就跟PHP的格式一樣的。 白名單過濾機制HTMLPurifier使用了白名單過濾機制,只有被設定允許的才會通過檢驗。 基本過濾範例a、過濾掉文字中的所有html標籤/** * 过滤掉所有html标签很简单,原因则在白名单机制完成 */ $config->set('HTML.Allowed', '');b、保留超連結標籤a及其href連結位址屬性,並自動新增target屬性值為'_blank'$config->set('HTML.Allowed', 'a[href]'); $config->set('HTML.TargetBlank', true);c、自動完成段落程式碼並清除掉無用的空白標籤// 让文本自动添加段落标签,前提是必须允许P标签的使用 $config->set('HTML.Allowed', 'p'); $config->set('AutoFormat.AutoParagraph', true); // 清除空标签 $config->set('AutoFormat.RemoveEmpty', true); ……
<?php namespace GenPhrase; use GenPhrase\WordlistHandler\WordlistHandlerInterface as WordlistHandlerInterface; use GenPhrase\WordlistHandler\Filesystem as WordlistHandler; use GenPhrase\WordModifier\WordModifierInterface as WordModifierInterface; use GenPhrase\WordModifier\MbToggleCaseFirst as WordModifier; use GenPhrase\Random\RandomInterface as RandomInterface; use GenPhrase\Random\Random as Random; class Password { protected $_wordlistHandler = null; protected $_wordModifier = null;簡單來說,就是把一個大整數m分解(直接以「分成單位,如1元即100)分解成n個小整數的過程,小整數的範圍是[min, max]。最簡單的思路,先保底,每個小口令保證有min,然後每個請求都隨機產生一個0到(max-min)範圍的整數,再加上min就是口令的。這個演算法雖然簡單,但是有一個弊端:最後產生的口令可能都是min的。
<?php /** * Simple autoloader that follow the PHP Standards Recommendation #0 (PSR-0) * @see https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md for more informations. * * Code inspired from the SplClassLoader RFC * @see https://wiki.php.net/rfc/splclassloader#example_implementation */ spl_autoload_register(function ($className) { $className = ltrim($className, '\'); $fileName = ''; if ($lastNsPos = strripos($className, '\')) { $namespace = substr($className, 0, $lastNsPos); $className = substr($className, $lastNsPos + 1); $fileName = str_replace('\', DIRECTORY_SEPARATOR, $namespace) . DIRECTORY_SEPARATOR; } $fileName = __DIR__ . DIRECTORY_SEPARATOR . $fileName . $className . '.php'; if (file_exists($fileName)) { require $fileName; return true; } return false; });Faker是python語言開發的工具,能夠為我們產生偽造數據的Python包,有時候我們需要產生大量看起來正常的偽數據,此時我們可以用到Faker來實現這些目的。 Faker可以直接在控制台視窗使用或透過呼叫API(應用函數介面)進行使用。它可以產生以下資料:假名字假的住宅地址和電子郵件地址假的國際假的信用卡卡號碼假的日期假的互聯網存取位址假的IP位址假的驗證口令我們可以使用Faker產生任何我們想要的信息,它能根據我們的要求隨機產生所有數據。現在Faker支援很多語言,支援印度語、義大利語、法語、保加利亞、荷蘭語等。