Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
習(xí)PHP的都想剖開框架了解下底層原理,一個(gè)PHP資源列表,內(nèi)容包括:庫、框架、模板、安全、代碼分析、日志、第三方庫、配置工具、Web 工具、書籍、電子書、經(jīng)典博文等等。
依賴和包管理庫
Composer/Packagist - 一個(gè)包和依賴管理器
Composer Installers - 一個(gè)多框架Composer庫安裝器
Pickle - 一個(gè)PHP擴(kuò)展安裝器
Melody - 一個(gè)用于構(gòu)建Composer腳本文件的工具
Climb - 一個(gè)Composer版本管理工具
其他的相關(guān)依賴管理
Satis - 一個(gè)靜態(tài)Composer存儲庫的生成器
Toran Proxy - 一個(gè)靜態(tài)Composer存儲庫和代理
Composition - 一個(gè)在運(yùn)行時(shí)檢查Composer環(huán)境的庫
NameSpacer - 一個(gè)轉(zhuǎn)化下劃線到命名空間的庫
Patch Installer - 一個(gè)使用Composer安裝補(bǔ)丁的庫
Composer Checker - 一個(gè)校驗(yàn)Composer配置的工具
Prestissimo - 一個(gè)開啟并行安裝進(jìn)程的Composer插件
Composer Merge Plugin - 一個(gè)用于合并多個(gè)composer.json文件的Composer插件
Web開發(fā)框架
Symfony 2 - 一個(gè)獨(dú)立組件組成的框架 (SF2)
Zend Framework 2 - 另一個(gè)由獨(dú)立組件組成的框架 (ZF2)
Laravel 5 - 另一個(gè)PHP框架 (L5)
Aura PHP - 一個(gè)獨(dú)立的組件框架
Yii2 - 另一個(gè)PHP框架
Nette - 另一個(gè)由個(gè)體組件組成的框架
PPI Framework 2 - 一個(gè)互操作性框架
CakePHP - 一個(gè)快速應(yīng)用程序開發(fā)框架 (CP)
Phalcon - 通過C擴(kuò)展實(shí)現(xiàn)的框架
其他Web開發(fā)框架
Symfony CMF - 一個(gè)創(chuàng)建自定義CMS的內(nèi)容管理框架
Knp RAD Bundle - Symfony 2的快速應(yīng)用程序(RAD)包
CakePHP CRUD - CakePHP的快速應(yīng)用程序(RAD)插件
來自web開發(fā)框架的獨(dú)立組件
Symfony2 Components - Symfony 2組件
Zend Framework 2 Components - Zend Framework 2組件
Aura Components - PHP5.4組件包
CakePHP Plugins - CakePHP插件的目錄
Hoa Project - 另一個(gè)PHP組件包
League of Extraordinary Packages - 一個(gè)PHP軟件開發(fā)組
加載配置文件的庫
Zend-config - Zend框架的配置組件
微型框架和路由
Silex - 基于Symfony2組件的微型框架
Slim - 另一個(gè)簡單的微型框架
Bullet PHP - 用于構(gòu)建REST APIs的微型框架
Lumen - 一個(gè)Laravel的微型框架
Proton - 一個(gè)StackPHP兼容的微型框架
其他相關(guān)的微型框架和路由
Silex Skeleton - Silex的項(xiàng)目架構(gòu)
Silex Web Profiler - 一個(gè)Silex web的調(diào)試工具
Slim Skeleton - Slim架構(gòu)
Slim View - Slim自定義視圖的集合
處理應(yīng)用路由的庫
Fast Route - 一個(gè)快速路由的庫
Route - 一個(gè)基于Fast Route的路由的庫
Pux - 另一個(gè)快速路由的庫
Klein - 一個(gè)靈活的路由的庫.
模板化和詞法分析的庫和工具
Twig - 一個(gè)全面的模板語言
Twig Cache Extension - 一個(gè)用于Twig的模板片段緩存庫
Mustache - 一個(gè)Mustache模板語言的PHP實(shí)現(xiàn)
Phly Mustache - 另一個(gè)Mustache模板語言的PHP實(shí)現(xiàn)
MtHaml - 一個(gè)HAML模板語言的PHP實(shí)現(xiàn)
PHPTAL - 一個(gè)TAL模板語言的PHP實(shí)現(xiàn)
Plates - 一個(gè)原生PHP模板庫
Lex - 一個(gè)輕量級模板解析器
用來生成web頁面的預(yù)處理內(nèi)容的工具
Sculpin - 轉(zhuǎn)換Markdown和Twig為靜態(tài)HTML的工具
Phrozn - 另一個(gè)轉(zhuǎn)換Textile,Markdown和Twig為HTML的工具
Spress - 一個(gè)能夠?qū)arkdown和Twig轉(zhuǎn)化為HTML的可擴(kuò)展工具
Couscous - 一個(gè)將Markdown轉(zhuǎn)化為漂亮的網(wǎng)站的工具
用于HTTP和網(wǎng)站爬取的庫
Guzzle - 一個(gè)全面的HTTP客戶端
Buzz - 另一個(gè)HTTP客戶端
Requests - 一個(gè)簡單的HTTP庫
HTTPFul - 一個(gè)鏈?zhǔn)紿TTP庫
Goutte - 一個(gè)簡單的web爬取器
PHP VCR - 一個(gè)錄制和重放HTTP請求的庫
使用中間件構(gòu)建應(yīng)用程序的庫
Stack - 一個(gè)用于Silex/Symfony的可堆疊的中間件的庫
Slim Middleware - 一個(gè)用于Slim的自定義的中間件的集合
Conduit - Sencha Connect連接到PHP的一個(gè)端口.
解析URL的庫
Purl - 一個(gè)URL處理庫
Uri - 另一個(gè)URL處理庫
PHP Domain Parser - 一個(gè)本地前綴解析庫
發(fā)送和解析郵件的庫
SwiftMailer - 一個(gè)郵件解決方案
PHPMailer - 另一個(gè)郵件解決方案
Fetch - 一個(gè)IMAP庫
Email Reply Parser - 一個(gè)郵件回復(fù)解析的庫
Stampie - 一個(gè)郵件服務(wù)庫,類似于SendGrid,PostMark,MailGun和Mandrill.
CssToInlineStyles - 一個(gè)在郵件模板中的內(nèi)聯(lián)CSS庫
Email Validator - 一個(gè)較小的電子郵件驗(yàn)證庫
Mautic - 郵件營銷自動(dòng)化
文件處理和MIME類型檢測的庫
Gaufrette - 一個(gè)文件系統(tǒng)抽象層
Flysystem - 另一個(gè)文件系統(tǒng)抽象層
Canal - 一個(gè)檢測互聯(lián)網(wǎng)媒體類型的庫
Apache MIME Types - 一個(gè)解析Apache MIME類型的庫
Ferret - 一個(gè)MIME檢測庫
Hoa Mime - 另一個(gè)MIME檢測庫
Lurker - 一個(gè)資源跟蹤庫
PHP FFmpeg - 一個(gè)用于FFmpeg視頻包裝的庫
CSV - 一個(gè)CSV數(shù)據(jù)處理庫
處理流的庫
Streamer - 一個(gè)簡單的面向?qū)ο蟮牧靼b庫
實(shí)現(xiàn)依賴注入設(shè)計(jì)模式的庫
Pimple - 一個(gè)小的依賴注入容器
Auryn - 一個(gè)遞歸的依賴注入容器
Container - 另一個(gè)可伸縮的依賴注入容器
PHP-DI - 一個(gè)支持自動(dòng)裝配和PHP配置的依賴注入容器
Acclimate - 一個(gè)依賴注入容器和服務(wù)定位的通用接口
Symfony DI - 一個(gè)依賴注入容器組件 (SF2)
處理圖像的庫
Imagine - 一個(gè)圖像處理庫
PHP Image Workshop - 另一個(gè)圖像處理庫
Intervention Image - 另一個(gè)圖像處理庫
GIF Frame Extractor - 一個(gè)提取GIF動(dòng)畫幀信息的庫
GIF Creator - 一個(gè)通過多張圖片創(chuàng)建GIF動(dòng)畫的庫
Image With Text - 一個(gè)在圖像中嵌入文本的庫
Color Extractor - 一個(gè)從圖像中提取顏色的庫
Glide - 一個(gè)按需處理圖像的庫
Image Optimizer - 一個(gè)優(yōu)化圖像的庫
Image Hash - 一個(gè)用于生成圖像哈希感知的庫
測試代碼和生成測試數(shù)據(jù)的庫
PHPUnit - 一個(gè)單元測試框架
DBUnit - 一個(gè)PHPUnit的數(shù)據(jù)庫測試庫
ParaTest - 一個(gè)PHPUnit的并行測試庫
PHPSpec - 一個(gè)基于功能點(diǎn)設(shè)計(jì)的單元測試庫
Codeception - 一個(gè)全棧測試框架
AspectMock - 一個(gè)PHPUnit/Codeception的模擬框架。
Atoum - 一個(gè)簡單的測試庫
Mockery - 一個(gè)用于測試的模擬對象的庫
Phake - 另一個(gè)用于測試的模擬對象的庫
Prophecy - 一個(gè)可選度很高的模擬框架
Faker - 一個(gè)偽數(shù)據(jù)生成庫
Samsui - 另一個(gè)偽數(shù)據(jù)生成庫
Alice - 富有表現(xiàn)力的一代庫
Behat - 一個(gè)行為驅(qū)動(dòng)開發(fā)(BDD)測試框架
Pho - 另一個(gè)行為驅(qū)動(dòng)開發(fā)測試框架
Mink - Web驗(yàn)收測試
HTTP Mock - 一個(gè)在單元測試模擬HTTP請求的庫
VFS Stream - 一個(gè)用于測試的虛擬文件系統(tǒng)流的包裝器
VFS - 另一個(gè)用于測試虛擬的文件系統(tǒng)
Locust - 一個(gè)用Python編寫的現(xiàn)代加載測試庫
Peridot - 一個(gè)事件驅(qū)動(dòng)開發(fā)的測試框架
Kahlan - 全棧Unit/BDD測試框架,內(nèi)置stub,mock和代碼覆蓋率的支持
持續(xù)集成的庫和應(yīng)用
Travis CI - 一個(gè)持續(xù)集成平臺
SemaphoreCI - 一個(gè)開放源碼和私人項(xiàng)目的持續(xù)集成平臺
PHPCI - 一個(gè)PHP的開源的持續(xù)集成平臺
Sismo - 一個(gè)持續(xù)測試的服務(wù)庫
Jenkins - 一個(gè)PHP支持的持續(xù)集成平臺
JoliCi - 一個(gè)用PHP編寫的由Docker支持的持續(xù)集成的客戶端
生成項(xiàng)目文檔的庫
Sami - 一個(gè)API文檔生成器
APIGen - 另一個(gè)API文檔生成器
PHP Documentor 2 - 一個(gè)API文檔生成器
phpDox - 一個(gè)PHP項(xiàng)目的文檔生成器(不限于API文檔)
daux.io - 一個(gè)使用Markdown文件的文檔生成器
生成安全的隨機(jī)數(shù),加密數(shù)據(jù),掃描漏洞的庫
HTML Purifier - 一個(gè)兼容標(biāo)準(zhǔn)的HTML過濾器
RandomLib - 一個(gè)生成隨機(jī)數(shù)和字符串的庫
True Random - 使用www.random.org生成隨機(jī)數(shù)的庫
SecurityMultiTool - 一個(gè)PHP安全庫
PHPSecLib - 一個(gè)純PHP安全通信庫
TCrypto - 一個(gè)簡單的鍵值加密存儲庫
PHP IDS - 一個(gè)結(jié)構(gòu)化的PHP安全層
PHP SSH - 一個(gè)試驗(yàn)的面向?qū)ο蟮腟SH包裝庫
IniScan - 一個(gè)掃描PHP INI文件安全的庫
SensioLabs Security Check - 一個(gè)為檢查Composer依賴提供安全建議的web工具
Zed - 一個(gè)集成的web應(yīng)用滲透測試工具
VAddy - 一個(gè)持續(xù)安全的web應(yīng)用測試平臺
Optimus - 基于Knuth乘法散列方法的身份混淆工具
處理和存儲密碼的庫和工具
Password Compat - 一個(gè)新的PHP5.5密碼函數(shù)的兼容庫
phpass - 一個(gè)便攜式的密碼哈希框架
PHP Password Lib - 一個(gè)生成和校驗(yàn)密碼的庫
Password Policy - 一個(gè)PHP和JavaScript的密碼策略庫
Password Validator - 一個(gè)校驗(yàn)和升級密碼哈希的庫
Zxcvbn PHP - 一個(gè)基于Zxcvbn JS的現(xiàn)實(shí)的PHP密碼強(qiáng)度估計(jì)庫
GenPhrase - 一個(gè)隨機(jī)生成安全密碼哈希的庫
分析,解析和處理代碼庫的庫和工具
PHP Parser - 一個(gè)PHP編寫的PHP解析器
PHPPHP - 一個(gè)PHP實(shí)現(xiàn)的PHP虛擬機(jī)
PHPSandbox - 一個(gè)PHP沙盒環(huán)境
Dissect - 一個(gè)詞法和語法分析的工具集合
PHP Mess Detector - 一個(gè)掃描代碼缺陷,次優(yōu)代碼,未使用的參數(shù)等等的庫。
PHP Code Sniffer - 一個(gè)檢測PHP、CSS和JS代碼標(biāo)準(zhǔn)沖突的庫
PHPCPD - 一個(gè)檢測復(fù)制和粘貼代碼的庫
PHP Analyser - 一個(gè)分析PHP代碼查找缺陷和錯(cuò)誤的庫
PHP CS Fixer - 一個(gè)編碼標(biāo)準(zhǔn)庫
PHP Manipulator - 一個(gè)分析和修改PHP源代碼的庫
PHP Metrics - 一個(gè)靜態(tài)測量庫
PHP Refactoring Browser - 一個(gè)重構(gòu)PHP代碼的命令行工具集
PHP Semantic Versioning Checker - 一個(gè)比較兩個(gè)源集和確定適當(dāng)?shù)膽?yīng)用語義版本的命令行實(shí)用程序
UBench - 一個(gè)簡單的微型基準(zhǔn)檢測庫
Athletic - 一個(gè)基于注釋的基準(zhǔn)檢測庫
Mondrian - 使用圖論的代碼分析工具
Scrutinizer - 一個(gè)審查PHP代碼的web工具
PHPLOC - 一個(gè)快速測量PHP項(xiàng)目大小的工具
PHPCheckstyle - 一個(gè)幫助遵守特定的編碼慣例的工具
PhpDependencyAnalysis - 一個(gè)創(chuàng)建可定制依賴圖的工具
Code Climate - 一個(gè)自動(dòng)代碼審查工具
相關(guān)的設(shè)計(jì)模式庫,組織代碼編程的方法和途徑
PHP Option - 一個(gè)可選的類型庫
Ruler - 一個(gè)簡單的無狀態(tài)的生產(chǎn)環(huán)境規(guī)則引擎
Finite - 一個(gè)簡單的PHP有限狀態(tài)機(jī)
Compose - 一個(gè)功能組合庫
Monad PHP - 一個(gè)簡單Monad庫
Patchwork - 一個(gè)重新定義用戶的函數(shù)庫
Galapagos - 語言轉(zhuǎn)換進(jìn)化
Design Patterns PHP - 一個(gè)使用PHP實(shí)現(xiàn)的設(shè)計(jì)模式存儲庫
Functional PHP - 一個(gè)函數(shù)式編程庫
Iter - 一個(gè)使用生成器提供迭代原語的庫
Pipeline - 一個(gè)管道模式的實(shí)現(xiàn)
調(diào)試和分析代碼的庫和工具
xDebug - 一個(gè)調(diào)試和分析PHP的工具
PHP Debug Bar - 一個(gè)調(diào)試工具欄
PHP Console - 一個(gè)web調(diào)試控制臺
Barbushin PHP Console - 另一個(gè)使用Google Chrome的web調(diào)試控制臺
PHPDBG - 一個(gè)交互的PHP調(diào)試器
Tracy - A一個(gè)簡單的錯(cuò)誤檢測,寫日志和時(shí)間測量庫
Z-Ray - 一個(gè)調(diào)試和配置Zend服務(wù)器的工具
xHprof - 另一個(gè)PHP分析工具
Blackfire.io - 一個(gè)低開銷的代碼分析器
Kint - 一個(gè)調(diào)試和分析工具
PHPBench - 一個(gè)基準(zhǔn)測試框架
項(xiàng)目構(gòu)建和自動(dòng)化工具
Bob - 一個(gè)簡單的項(xiàng)目自動(dòng)化工具
Phake - 一個(gè)PHP克隆庫
Box - 一個(gè)構(gòu)建PHAR文件的工具
Phing - 一個(gè)靈感來自于Apache Ant的PHP項(xiàng)目構(gòu)建系統(tǒng)
自動(dòng)運(yùn)行任務(wù)的庫
Task - 一個(gè)靈感來源于Grunt和Gulp的純PHP任務(wù)運(yùn)行器
Robo - 一個(gè)面向?qū)ο笈渲玫腜HP任務(wù)運(yùn)行器
Bldr - 一個(gè)構(gòu)建在Symfony組件上的PHP任務(wù)運(yùn)行器
構(gòu)建導(dǎo)航結(jié)構(gòu)的工具
KnpMenu - 一個(gè)菜單庫
Cartographer - 一個(gè)站點(diǎn)地圖生成庫
管理,壓縮和最小化web站點(diǎn)資源的工具
Assetic - 一個(gè)資源管理的管道庫
Pipe - 另一個(gè)資源管理的管道庫
Munee - 一個(gè)資源優(yōu)化庫
JShrink - 一個(gè)JavaScript的最小化庫
Puli - 一個(gè)檢測資源絕對路徑的庫
地理編碼地址和使用緯度經(jīng)度的庫
GeoCoder - 一個(gè)地理編碼庫
GeoTools - 一個(gè)地理工具相關(guān)的庫
PHPGeo - 一個(gè)簡單的地理庫
GeoJSON - 一個(gè)GeoJSON的實(shí)現(xiàn)
處理日期和時(shí)間的庫
Carbon - 一個(gè)簡單的日期時(shí)間API擴(kuò)展
ExpressiveDate - 另一個(gè)日期時(shí)間API擴(kuò)展
CalendR - 一個(gè)日歷管理庫
時(shí)間驅(qū)動(dòng)或?qū)崿F(xiàn)非阻塞事件循環(huán)的庫
React - 一個(gè)事件驅(qū)動(dòng)的非阻塞I/O庫.
Rx.PHP - 一個(gè)reactive擴(kuò)展庫
Ratchet - 一個(gè)web socket庫
Hoa WebSocket - 另一個(gè)web socket庫
Hoa EventSource - 一個(gè)事件源庫
Evenement - 一個(gè)事件調(diào)度的庫
Event - 一個(gè)專注于域名事件的庫
Cake Event - 一個(gè)事件調(diào)度的庫 (CP)
Broadway - 一個(gè)事件源和CQRS(命令查詢責(zé)任分離)庫
生成和處理日志文件的庫
Monolog - 一個(gè)全面的日志工具
KLogger - 一個(gè)易用的兼容PSR-3的日志類
Analog - 一個(gè)基于閉包的微型日志包
處理支付和構(gòu)建在線電子商務(wù)商店的庫和應(yīng)用
OmniPay - 一個(gè)框架混合了多網(wǎng)關(guān)支付處理的庫
Payum - 一個(gè)支付抽象庫
Sylius - 一個(gè)開源的電子商務(wù)解決方案
Thelia - 另一個(gè)開源的電子商務(wù)解決方案
Money - 一個(gè)Fowler金錢模式的PHP實(shí)現(xiàn)
Sebastian Money - 另一個(gè)處理貨幣值的庫
Swap - 一個(gè)匯率庫
處理PDF文件的庫和軟件
Snappy - 一個(gè)PDF和圖像生成器庫
WKHTMLToPDF - 一個(gè)將HTML轉(zhuǎn)換為PDF的工具
PHPPdf - 一個(gè)將XML文件轉(zhuǎn)換為PDF和圖片的庫
Dompdf - 一個(gè)將HTML轉(zhuǎn)換為PDF的工具
Libraries for working with office suite documents.
PHPWord - 一個(gè)處理Word文檔的庫
PHPExcel - 一個(gè)處理Excel文檔的庫
PHPPowerPoint - 一個(gè)處理PPT文檔的庫
ExcelAnt - 一個(gè)操作Excel文檔的庫
使用對象關(guān)系映射(ORM)或數(shù)據(jù)映射技術(shù)的數(shù)據(jù)庫交互的庫
Doctrine - 一個(gè)全面的DBAL和ORM
Doctrine Extensions - 一個(gè)Doctrine行為擴(kuò)展的集合
Propel - 一個(gè)快速的ORM,遷移庫和查詢構(gòu)架器
Eloquent - 一個(gè)簡單的ORM(L5)
LazyRecord - 一個(gè)簡單、可擴(kuò)展、高性能的ORM
Baum - 一個(gè)Eloquent的嵌套集實(shí)現(xiàn)
Spot2 - 一個(gè)MySQL的ORM映射器
RedBean - 一個(gè)輕量級,低配置的ORM
Pomm - 一個(gè)PostgreSQL對象模型管理器
ProxyManager - 一個(gè)為數(shù)據(jù)映射生成代理對象的工具集
Cake ORM - 對象關(guān)系映射工具,利用DataMapper模式實(shí)現(xiàn) (CP)
幫助管理數(shù)據(jù)庫模式和遷移的庫
PHPMig - 另一個(gè)遷移管理庫
Phinx - 另一個(gè)數(shù)據(jù)庫遷移的管理庫
Migrations - 一個(gè)遷移管理庫
Doctrine Migrations - 一個(gè)Doctrine的遷移庫
Ruckusing - 基于PHP下ActiveRecord的數(shù)據(jù)庫遷移,支持MySQL, Postgres, SQLite
處理NoSQL后端的庫
MongoQB - 一個(gè)MongoDB查詢構(gòu)建庫
Monga - 一個(gè)MongoDB抽象庫
Predis - 一個(gè)功能完整的Redis庫
處理事件和任務(wù)隊(duì)列的庫
Pheanstalk - 一個(gè)Beanstalkd客戶端庫
PHP AMQP - 一個(gè)純PHP AMQP庫
Thumper - 一個(gè)RabbitMQ模式庫
Bernard - 一個(gè)多后端抽象庫
在數(shù)據(jù)上索引和執(zhí)行查詢的庫和軟件
ElasticSearch PHP - ElasticSearch的官方客戶端庫
Elastica - ElasticSearch的客戶端庫
Solarium - Solr的客戶端庫
SphinxQL query builder - Sphinx搜索引擎的的查詢庫
關(guān)于命令行工具的庫
Boris - 一個(gè)微型PHP REPL
PsySH - 另一個(gè)PHP REPL
Pecan - 一個(gè)事件驅(qū)動(dòng)和非阻塞的shell
GetOpt - 一個(gè)命令行選擇解析器
OptParse - 另一個(gè)命令行選擇解析器
Commando - 另一個(gè)簡單的命令行選擇解析器
GetOptionKit - 另一個(gè)命令行選擇解析器
Cron Expression - 一個(gè)計(jì)算cron運(yùn)行日期的庫
ShellWrap - -一個(gè)簡單的命令行包裝庫
Hoa Console - 另一個(gè)命令行庫
Shunt - 一個(gè)在多臺遠(yuǎn)程機(jī)器上并行運(yùn)行命令行的庫
Cilex - 一個(gè)構(gòu)建命令行工具的微型框架
CLImate - 一個(gè)輸出帶顏色的和特殊格式的命令行庫
CLI Menu - 一個(gè)構(gòu)建CLI菜單的庫
CLIFramework - 一個(gè)支持完全zsh/bash、子命令和選項(xiàng)約束的命令行框架,這也歸功于phpbrew
實(shí)現(xiàn)身份驗(yàn)證和授權(quán)的庫
Sentinel - 一個(gè)混合的身份驗(yàn)證和授權(quán)的框架庫
Sentinel Social - 一個(gè)社交網(wǎng)絡(luò)身份驗(yàn)證庫
Opauth - 一個(gè)多渠道的身份驗(yàn)證框架
OAuth2 Server - 一個(gè)OAuth2身份驗(yàn)證服務(wù),資源服務(wù)器和客戶端庫
OAuth2 Server - 另一個(gè)OAuth2服務(wù)器實(shí)現(xiàn)
PHP oAuthLib - 另一個(gè)OAuth庫
TwitterOAuth - 一個(gè)Twitter OAuth庫
TwitterSDK - 一個(gè)完全測試的Twitter SDK
Hawk - 一個(gè)Hawk HTTP身份認(rèn)證庫
HybridAuth - 一個(gè)開源的社交登陸庫
Lock - 一種實(shí)現(xiàn)訪問控制列表(ACL)系統(tǒng)的庫
OAuth 1.0 Client - 一個(gè)OAuth 1.0客戶端的庫
OAuth 2.0 Client - 一個(gè)OAuth 2.0客戶端的庫
處理標(biāo)記的庫
Decoda - 一個(gè)輕量級標(biāo)記解析庫
PHP Markdown - 一個(gè)Markdown解析器
CommonMark PHP - 一個(gè)對CommonMark spec全支持的Markdown解析器
Parsedown - 另一個(gè)Markdown解析器
Ciconia - 另一個(gè)支持Github Markdown風(fēng)格的Markdown解析器
Cebe Markdown - 一個(gè)快速的可擴(kuò)展的Markdown解析器
HTML to Markdown - 將HTML轉(zhuǎn)化為Markdown
HTML5 PHP - 一個(gè)HTML5解析和序列化庫
Emoji - 一個(gè)把Unicode字符和名稱轉(zhuǎn)換為表情符號圖片的庫
解析和處理字符串的庫
ANSI to HTML5 - 一個(gè)將ANSI轉(zhuǎn)化為HTML5的庫
Patchwork UTF-8 - 一個(gè)處理UTF-8字符串的便攜庫
Hoa String - 另一個(gè)UTF-8字符串庫
Stringy - 一個(gè)多字節(jié)支持的字符串處理庫
Color Jizz - 處理和轉(zhuǎn)換顏色的庫
UUID - 生成UUIDs的庫
Slugify - 轉(zhuǎn)換字符串到slug的庫
URLify - 一個(gè)Django中URLify.js的PHP版本
Text - 一個(gè)文本處理庫
SQL Formatter - 一個(gè)格式化SQL語句的庫
UA Parser - 一個(gè)解析user agent字符串的庫
Device Detector - 另一個(gè)解析user agent字符串的庫
Mobile-Detect - 一個(gè)用于檢測移動(dòng)設(shè)備的輕量級PHP類(包括平板電腦)
Agent - 一個(gè)基于Mobiledetect的桌面/手機(jī)端user agent解析庫
處理數(shù)字的庫
Numbers PHP - 一個(gè)處理數(shù)字的庫
Math - 一個(gè)處理巨大數(shù)字的庫
ByteUnits - 一個(gè)在二進(jìn)制和度量系統(tǒng)中解析,格式化和轉(zhuǎn)換字節(jié)單元的庫
PHP Units of Measure - 一個(gè)計(jì)量單位轉(zhuǎn)換的庫
PHP Conversion -另一個(gè)計(jì)量單位轉(zhuǎn)換的庫
LibPhoneNumber for PHP - 一個(gè)Google電話號碼處理的PHP實(shí)現(xiàn)庫
過濾和驗(yàn)證數(shù)據(jù)的庫
Filterus - 一個(gè)簡單的PHP過濾庫
Respect Validation - 一個(gè)簡單的驗(yàn)證庫
Valitron - 另一個(gè)驗(yàn)證庫
Cake Validation - 另一個(gè)驗(yàn)證庫 (CP)
Upload - 一個(gè)處理文件上傳和驗(yàn)證的庫
DMS Filter - 一個(gè)注釋過濾庫
MetaYaml - 一個(gè)支持YAML,JSON和XML的模式驗(yàn)證庫
ISO-codes - 一個(gè)驗(yàn)證各種ISO和ZIP編碼的庫(IBAN, SWIFT/BIC, BBAN, VAT, SSN, UKNIN)
開發(fā)REST-ful API的庫和web工具
Apigility - 一個(gè)使用Zend Framework 2構(gòu)建的API構(gòu)建器
Hateoas - 一個(gè)HOATEOAS REST web服務(wù)庫
HAL - 一個(gè)超文本應(yīng)用語言(HAL)構(gòu)建庫
Negotiation - 一個(gè)內(nèi)容協(xié)商庫
Drest - 一個(gè)將Doctrine實(shí)體暴露為REST資源節(jié)點(diǎn)的庫
Restler - 一個(gè)將PHP方法暴露為RESTful web API的輕量級框架
wsdl2phpgenerator - 一個(gè)從SOAP WSDL文件生成PHP類的工具
緩存數(shù)據(jù)的庫
Alternative PHP Cache (APC) - 打開PHP操作碼緩存
Doctrine Cache - 一個(gè)緩存庫
Zend Cache - 另一個(gè)緩存庫 (ZF2)
Cake Cache - 一個(gè)緩存庫 (CP)
Stash - 另一個(gè)緩存庫
CacheTool - 一個(gè)使用命令行清除apc/opcode緩存的工具
phpRedisAdmin - 一個(gè)用于管理Redis數(shù)據(jù)庫的簡單web界面
phpPgAdmin - 一個(gè)PostgreSQL的web管理工具
phpMyAdmin - 一個(gè)MySQL/MariaDB的web界面
Adminer - 一個(gè)數(shù)據(jù)庫管理工具
Grav - 一個(gè)現(xiàn)代的flat-file的CMS
實(shí)現(xiàn)數(shù)據(jù)結(jié)構(gòu)和存儲技術(shù)的庫
Ardent - 一個(gè)數(shù)據(jù)結(jié)構(gòu)庫
PHP Collections - 一個(gè)簡單的集合庫
Collections - 一個(gè)PHP的集合抽象庫
Serializer - 一個(gè)序列化和反序列化數(shù)據(jù)的庫
Zend Serializer - 另一個(gè)序列化和反序列化數(shù)據(jù)的庫 (ZF2)
Fractal - 一個(gè)轉(zhuǎn)換復(fù)雜數(shù)據(jù)結(jié)構(gòu)到JSON輸出的庫
Totem - -一個(gè)管理和創(chuàng)建數(shù)據(jù)交換集的庫
PINQ - 一個(gè)基于.NET實(shí)現(xiàn)的PHP的LINQ(Language Integrated Query)庫
YaLinqo - 另一個(gè)PHP的LINQ庫
Ginq - 另一個(gè)基于.NET實(shí)現(xiàn)的PHP的LINQ庫
JsonMapper - 一個(gè)將內(nèi)嵌JSON結(jié)構(gòu)映射為PHP類的庫
Cake Collection - 一個(gè)簡單的集合庫 (CP)
處理通知軟件的庫
Nod - 一個(gè)通知庫(Growl等)
Notificato - 一個(gè)處理推送通知的庫
Notification Pusher - 一個(gè)設(shè)備推送通知的獨(dú)立庫
Notificator - 一個(gè)輕量級的通知庫
項(xiàng)目部署庫
Pomander - 一個(gè)PHP應(yīng)用部署工具
Rocketeer - PHP世界里的一個(gè)快速簡單的部署器
Envoy - 一個(gè)用PHP運(yùn)行SSH任務(wù)的工具
Plum - 一個(gè)部署庫
Deployer - 一個(gè)部署工具
國際化(I18n)和本地化(L10n)的庫
Aura Intl
Cake I18n - 消息國際化和日期和數(shù)字的本地化 (CP)
訪問第三方API的庫
Amazon Web Service SDK - PHP AWS SDK官方庫
S3 Stream Wrapper - Amazon S3流包裝庫
Stripe - Stripe官方PHP庫
Campaign Monitor - Campaign Monitor官方PHP庫
Digital Ocean - Digital Ocean API接口庫
Github - 一個(gè)Github API交互庫
PHP Github API - 另一個(gè)Github API交互庫
Twitter OAuth - 一個(gè)Twitter OAuth工作流交互庫
Twitter REST - 一個(gè)Twitter REST API交互庫
Dropbox SDK - Dropbox SDK官方PHP庫
Twilio - Twilio官方PHP REST API
Mailgun - Mailgun官方PHP REST API
幫助構(gòu)建PHP擴(kuò)展的庫
Zephir - 用于開發(fā)PHP擴(kuò)展,且介于PHP和C++之間的編譯語言
PHP CPP - 一個(gè)開發(fā)PHP擴(kuò)展的C++庫
不在上面分類中的有用庫和工具
Spork - 一個(gè)處理forking的庫
JSON Lint - 一個(gè)JSON lint工具
JSONPCallbackValidator - 驗(yàn)證JSONP回調(diào)的庫
Pagerfanta - 一個(gè)分頁庫
LiteCQRS - 一個(gè)CQRS(命令查詢責(zé)任分離)庫
Chief - 一個(gè)命令總線庫
Sslurp - 一個(gè)使得SSL處理減少的庫
Metrics - 一個(gè)簡單的度量API庫
Sabre VObject - 一個(gè)解析VCard和iCalendar對象的庫
Annotations - 一個(gè)注釋庫(Doctrine的一部分)
Whoops - 一個(gè)不錯(cuò)的錯(cuò)誤處理庫
LadyBug - 一個(gè)dumper庫
Symfony VarDumper - 一個(gè)dumper庫(SF2)
Procrastinator - 一個(gè)運(yùn)行耗時(shí)任務(wù)的庫
SuperClosure - 一個(gè)允許閉包序列化的庫
Jumper - 一個(gè)遠(yuǎn)程服務(wù)執(zhí)行庫
Underscore - 一個(gè)Undersccore JS庫的PHP實(shí)現(xiàn)
PHP PassBook - 一個(gè)iOS PassBook PHP庫
PHP Expression - 一個(gè)PHP表達(dá)式語言
RMT - 一個(gè)編寫版本和發(fā)布軟件的庫
Opengraph - 一個(gè)開放圖庫
Essence -一個(gè)提取web媒體的庫
Embera - 一個(gè)Oembed消費(fèi)庫
Graphviz - 一個(gè)圖形庫
Flux - 一個(gè)正則表達(dá)式構(gòu)建庫
PHPCR - 一個(gè)Java內(nèi)容存儲庫(JCR)的PHP實(shí)現(xiàn)
ClassPreloader - 一個(gè)優(yōu)化自動(dòng)加載的庫
PHPStack - 一個(gè)PHP編寫的TCP/IP棧概念
Nmap - 一個(gè)Nmap PHP包裝器
Lambda PHP - 一個(gè)PHP中的Lambda計(jì)算解析器
Country List - 所有帶有名稱和ISO 3166-1編碼的國家列表
PHP-GPIO - 一個(gè)用于Raspberry PI的GPIO pin的庫
print_o - 一個(gè)對象圖的可視化器
Alias - 一個(gè)類別名庫
Cake Utility - 工具類如Inflector,字符串,哈希,安全和XML (CP)
Slimdump - 一個(gè)簡單的MySQL dumper工具
創(chuàng)建一個(gè)開發(fā)環(huán)境的軟件
在你的電腦上幫助安裝和管理PHP的工具
HomeBrew - 一個(gè)OSX包管理器
HomeBrew PHP - 一個(gè)HomeBrew的PHP通道
PHP OSX - 一個(gè)OSX下的PHP安裝器
PHP Brew - 一個(gè)PHP版本管理和安裝器
PHP Env - 另一個(gè)PHP版本管理器
PHP Switch - 另一個(gè)PHP版本管理器
PHP Build - 另一個(gè)PHP版本安裝器
VirtPHP - 一個(gè)創(chuàng)建和管理獨(dú)立PHP環(huán)境的工具
創(chuàng)建沙盒開發(fā)環(huán)境的軟件和工具
Vagrant - 一個(gè)便攜的開發(fā)環(huán)境工具
Ansible - 一個(gè)非常簡單的編制框架
Puppet - 一個(gè)服務(wù)器自動(dòng)化框架和應(yīng)用
PuPHPet - 一個(gè)構(gòu)建PHP開發(fā)虛擬機(jī)的web工具
Protobox - 另一個(gè)構(gòu)建PHP開發(fā)虛擬機(jī)的web工具
Phansible - 一個(gè)用Ansible構(gòu)建PHP開發(fā)虛擬機(jī)的web工具
相關(guān)的PHP虛擬機(jī)
HHVM - Facebook出品的PHP虛擬機(jī),Runtime和JIT
HippyVM - 另一個(gè)PHP虛擬機(jī)
Hack - 一個(gè)PHP進(jìn)行無縫操作的HHVM編程語言
支持PHP的集成開發(fā)環(huán)境
Netbeans - 一個(gè)支持PHP和HTML5的IDE
Eclipse for PHP Developers - 一個(gè)基于Eclipse平臺的PHP IDE
PhpStorm - 一個(gè)商業(yè)PHP IDE
基于Web的應(yīng)用和工具
3V4L - 一個(gè)在線的PHP和HHVM shell
DBV - 一個(gè)數(shù)據(jù)庫版本控制應(yīng)用
PHP Queue - A一個(gè)管理后端隊(duì)列的應(yīng)用
MailCatcher - 一個(gè)抓取和查看郵件的web工具
Cachet - 開源狀態(tài)頁面系統(tǒng)
提供PHP應(yīng)用和服務(wù)的基礎(chǔ)架構(gòu)
appserver.io - 一個(gè)用PHP寫的多線程的PHP應(yīng)用服務(wù)器
文由公眾號 “把科學(xué)帶回家”提供
給孩子最好的科學(xué)教育
作者 七君
實(shí)習(xí)生 小王子對本文也有幫助
霧霾之下,許多家庭都購買了空氣凈化器,希望給家人,特別是老人和小孩帶來一個(gè)能夠安全呼吸的小環(huán)境。
當(dāng)空氣凈化器上的 PM 指數(shù)不斷下降,你的內(nèi)心一定會感到些許安慰。許多人把空氣凈化器當(dāng)成了自己最后的呼吸守護(hù)者。
但是下面這些消息,可能會讓你對家中的空氣凈化器產(chǎn)生疑慮。
今年7月20日,韓國環(huán)境部爆出,在韓國市面上的空氣凈化器和車載空調(diào)的過濾網(wǎng)中,檢測出了對人體有害的OIT(octylisothiazolinone,辛基異噻唑啉酮)。含有OIT的產(chǎn)品涉及到了大部分市面上的品牌,多達(dá)84個(gè)型號。
什么是OIT呢?OIT是一種抗菌、防霉的油溶性化學(xué)物質(zhì)。在一些標(biāo)注著“除菌”型凈化器的過濾網(wǎng)上,廠家會采用OIT這種防霉劑來殺菌,并防止濾網(wǎng)發(fā)霉。但是這種化學(xué)制劑對人體是有害的,它對水生生物有較強(qiáng)的毒性,并且在直接接觸或者通過空氣傳播的情況下會引起人體的過敏性反應(yīng)。防霉劑成分會隨著凈化器和空調(diào)的排風(fēng),一起進(jìn)入人體。
韓國環(huán)境部對此已進(jìn)行了風(fēng)險(xiǎn)評估,并認(rèn)為OIT這種抗菌成分對人體健康有潛在的風(fēng)險(xiǎn)。為了公眾健康著想,韓國環(huán)境部已經(jīng)要求各大生產(chǎn)商召回所有含OIT成分的空氣凈化器濾網(wǎng)。
另據(jù)韓國國際廣播電臺(KBS)7月22日報(bào)道,韓國環(huán)境部此后公布的含有有毒物質(zhì)OIT的84項(xiàng)空氣凈化器和空調(diào)等產(chǎn)品的名單中,三星電子、LG電子、Cuckoo 等公司的一些產(chǎn)品赫然在列。
這些公司的濾網(wǎng)都是由兩家國際品牌生產(chǎn)的。
隨后,3M公司對在空氣凈化器濾網(wǎng)中檢測出有毒物質(zhì)的事件表示道歉,并馬上開始召回產(chǎn)品。
那么,目前國內(nèi)凈化器品牌對OIT是否關(guān)注了呢?
把科學(xué)帶回家對目前中國市面上的空氣凈化器產(chǎn)品進(jìn)行了調(diào)研,我們發(fā)現(xiàn)除了少數(shù)產(chǎn)品之外,大部分品牌在產(chǎn)品說明中并沒有明確指出不含OIT成分。
一些韓國品牌目前在產(chǎn)品包裝上明確標(biāo)注不含OIT
一些沒有明確標(biāo)注不含OIT的品牌產(chǎn)品介紹:
某米 ▼
某爾 ▼
某浦 ▼
某米 ▼
某L ▼
某些明確標(biāo)注不含OIT的品牌產(chǎn)品介紹:
你買的是“除菌型”的空氣凈化器嗎?
你家的凈化器濾網(wǎng)有OIT嗎?
資料來源:
twitter.com/kbschinese/status/756395284440031232
world.kbs.co.kr/chinese/news/news_Dm_detail.htm?No=51204
world.kbs.co.kr/korean/news/news_Dm_detail.htm?No=265876
www.koreaherald.com/view.php?ud=20160722000831
businesskorea.co.kr/english/news/industry/15339-3m%E2%80%99s-recall-3m-korea-recall-air-purifier-filters-containing-toxic-chemicals
koreabizwire.com/oit-found-in-supposedly-safe-samsung-air-purifiers/62086
en.wikipedia.org/wiki/Isothiazolinone
koreajoongangdaily.joins.com/news/article/article.aspx?aid=3021577
koreabizwire.com/air-purifiers-in-spotlight-amid-toxic-substance-controversy/58252
不過癮?請戳
為什么孩子要學(xué)編程?編程和數(shù)學(xué)有關(guān)系嗎?
沒想到你是這樣的胖達(dá)
把科學(xué)帶回家ID:bringsciencehome
給孩子最好的科學(xué)教育
轉(zhuǎn)載請聯(lián)系 kids@huanqiukexue.com
長按二維碼關(guān)注我們
文作者:囧小平
寫在前面
首先感謝來自瀚思彼岸的諸位熱心網(wǎng)友以及Home Assistant的諸位開發(fā)者。是他們的辛勤貢獻(xiàn),讓我們普通人也有了自己動(dòng)手打造智能家居的機(jī)會。是他們的熱心付出,給我們的生活帶來了更多的便利。
另外,本文的閱讀和操作都有一定的門檻和難度,實(shí)際動(dòng)手前,建議三思而行。本教程不可能面面俱到,每一個(gè)步驟都有許多種解決方案,并可以展開為一個(gè)很大的話題。但是篇幅所限,我只能選擇性地展開闡述。在本教程的引導(dǎo)下進(jìn)行實(shí)際操作的過程中,也不可避免地會遇到種種問題。建議善于使用搜索引擎自行解決,并在適當(dāng)?shù)臅r(shí)候選擇放棄。。。
Home Assistant相信大家都比較了解。論壇里和Home Assistant相關(guān)的原創(chuàng)文章也是多如牛毛。Home Assistant是一款基于Python的智能家居開源系統(tǒng),支持眾多品牌的智能家居設(shè)備,可以輕松實(shí)現(xiàn)設(shè)備的語音控制、自動(dòng)化等。天貓精靈自然也不用過多介紹。天貓精靈方糖發(fā)布時(shí),以較低的價(jià)格吸引了大批用戶,估計(jì)很多值友家中都有一臺天貓精靈方糖吧。天貓精靈本身也能夠支持許多品牌的智能電器,實(shí)現(xiàn)語音控制。
但是其主流常用品牌的支持?jǐn)?shù)量肯定不如Home Assistant。比如在國內(nèi)智能家居領(lǐng)域處于領(lǐng)先地位的小米,自然不會把自己的蛋糕拱手讓給阿里,小米自家的小愛同學(xué)第一個(gè)不答應(yīng)。然而,經(jīng)過Hacker們的不斷努力,開源的Home Assistant目前已經(jīng)能夠支持控制大部分小米系的智能家電產(chǎn)品了。如果能夠?qū)⑻熵埦`的語音識別能力和Home Assistant的家電控制能力結(jié)合,讓天貓精靈能夠控制小米系甚至更多其他品牌的智能家電,豈不美滋滋。
有需求,就必有人折騰。不甘受制于人的程序員們幫我們解決了大部分問題,讓曾經(jīng)的不可能變成了可能。下面,我就講述一下具體如何實(shí)現(xiàn)這個(gè)目的。
準(zhǔn)備工作
這部分內(nèi)容是比較基礎(chǔ)的部分,基本凡是曾經(jīng)利用Home Assistant構(gòu)建過智能家居的,都會接觸過本章節(jié)涉及的內(nèi)容。這部分內(nèi)容會為后續(xù)實(shí)現(xiàn)天貓精靈接入Home Assistant打下基礎(chǔ)。由于是屬于比較基礎(chǔ)的部分,網(wǎng)絡(luò)上對此的相關(guān)討論和教程都比較豐富。所以每個(gè)步驟可能不會做太全面和深入的展開。
Home Assistant搭建
Home Assistant搭建是基礎(chǔ)中的的基礎(chǔ),搭建的方式也是花樣萬千,相關(guān)的教程更是多不勝數(shù)。但是無論是誰寫的教程,都肯定不如官方教程。所以有英文基礎(chǔ)的都建議去讀官方教程:點(diǎn)我直達(dá)
我這里大概闡述一下Home Assistant常見的安裝載體和安裝方式。
1.安裝載體
Home Assistant要運(yùn)行于某種載體之上,所謂載體就是一臺具有Python環(huán)境的主機(jī)。它可以是一臺低功耗服務(wù)器,也可以是一臺閑置筆記本;可以是一臺群暉之類的NAS,也可以是一塊樹莓派等Arm開發(fā)板;甚至還可以是你的閑置的,并且最好是已經(jīng)root的安卓手機(jī)。只要這種載體具備了Home Assistant運(yùn)行所需要的依賴就可以。為了讓Home Assistant能夠長期穩(wěn)定低為你服務(wù),這個(gè)載體最好是低功耗的,能夠連接網(wǎng)絡(luò),并有著穩(wěn)定的網(wǎng)絡(luò)環(huán)境,而對性能方面的要求并不高。
2.安裝方式
根據(jù)運(yùn)行載體的不同,Home Assistant也有著多種不同的安裝方式。
如果你的載體是一塊樹莓派開發(fā)板,我推薦使用直接燒寫Hass.io鏡像的方式,這也是官方推薦的安裝載體和安裝方式。
如果你的載體是一臺服務(wù)器,則可以在安裝完畢Python運(yùn)行環(huán)境后,用幾條簡單的命令安裝。選擇用這種方式安裝的時(shí)候,別忘記修改一下Python pip軟件源為國內(nèi)鏡像地址,這樣可以加快安裝速度。具體的修改方式是:創(chuàng)建或修改配置文件(linux的文件在~/.pip/pip.conf,windows在%HOMEPATH%pippip.ini),修改內(nèi)容為:
[global] index-url = http://pypi.douban.com/simple
如果你的載體是一臺NAS服務(wù)器,那么簡單便捷的docker安裝方式肯定是你的首選。但是有時(shí)候我覺得docker這種安裝方式有點(diǎn)不便于調(diào)試,也可能是我不會在docker下進(jìn)行調(diào)試。
如果你的載體是一臺Android手機(jī),那么最好是root過的。我本人并沒有實(shí)踐過在Android手機(jī)上安裝Home Assistant,感興趣的可以參考這個(gè)教程:點(diǎn)我直達(dá)。那么,祝你好運(yùn)。
當(dāng)選好了合適的載體,安裝并成功運(yùn)行Home Assistant,在瀏覽器中輸入載體的IP加默認(rèn)端口號8123,就能通過網(wǎng)頁來瀏覽和管理Home Assistant。走到這一步,就為后面的折騰打下了基礎(chǔ)中的基礎(chǔ)。
內(nèi)網(wǎng)穿透
為什么需要內(nèi)網(wǎng)穿透呢?我們目前所搭建的Home Assistant服務(wù),訪問的地址是一個(gè)內(nèi)網(wǎng)IP。這就意味著這個(gè)服務(wù)暫時(shí)只能在局域網(wǎng)中訪問。而如果想要實(shí)現(xiàn)天貓精靈接入Home Assistant的目的,必須讓這個(gè)服務(wù)在外網(wǎng)也可以訪問到。為了達(dá)到這個(gè)目的,可能又要經(jīng)過一番折騰了。
如果你家中的寬帶網(wǎng)絡(luò)具有公網(wǎng)IP,那么恭喜你,實(shí)現(xiàn)內(nèi)網(wǎng)穿透是一件很容易的事情。問題是,現(xiàn)在公網(wǎng)IP屬于稀缺資源,大部分網(wǎng)絡(luò)運(yùn)營商并不會輕易給你一個(gè)公網(wǎng)IP,所以要實(shí)現(xiàn)內(nèi)網(wǎng)穿透就要另辟蹊徑了。
一般常用的方式有ngrok和frp。你可以選擇自己購買云服務(wù)器或者VPS搭建這些服務(wù)為己所用。也可以選擇一些商家搭建好的免費(fèi)或者收費(fèi)的服務(wù)。無論是ngrok還是frp,其服務(wù)的搭建和客戶端的使用都略微復(fù)雜,展開的話都是一個(gè)比較大的話題。鑒于折騰的人比較多,其相關(guān)資源也很豐富,我就不再贅述了。
以上兩種常見的內(nèi)網(wǎng)穿透方法我都用過,由于種種原因,用起來并不順手。后來我換用了一種更簡單的方式---花生棒。首先聲明這不是廣告,并以京東訂單截圖證明我的清白。
另一方面,Oray隨便在站內(nèi)軟文比較多,但是其確實(shí)有不少產(chǎn)品以簡單的方式解決了我們的一些網(wǎng)絡(luò)需求。比如向日葵遠(yuǎn)程控制和花生棒內(nèi)網(wǎng)穿透,都成了我日常生活中不可缺少的軟硬件產(chǎn)品。
花生棒實(shí)現(xiàn)內(nèi)網(wǎng)穿透真的十分簡單。首先,把花生棒通過網(wǎng)線,連接到需要進(jìn)行內(nèi)網(wǎng)穿透的那個(gè)設(shè)備所處的路由器上。然后,登錄注冊并綁定好花生棒硬件的Oray賬號,進(jìn)入花生殼的內(nèi)網(wǎng)穿透管理頁面。在映射列表里,增加一條映射。
在映射編輯界面,選擇一個(gè)免費(fèi)的花生殼二級域名。外網(wǎng)端口號在免費(fèi)使用的情況下只能動(dòng)態(tài)生成,無法指定。接著再填入內(nèi)網(wǎng)主機(jī)的IP和端口號即可。
然后根據(jù)此設(shè)置會生成一個(gè)外網(wǎng)訪問地址,以后就可以通過這個(gè)地址訪問內(nèi)網(wǎng)所搭建的Http服務(wù)。
一個(gè)花生棒的免費(fèi)配額如下:端口映射2條,帶寬速度,1Mbps/映射,花生殼流量1G/月(花生棒首年2G/月)。
兩條映射被我分別用來穿透路由器管理頁面和Home Assistant。暫時(shí)沒有別的穿透需求,基本夠用了。網(wǎng)速限制和流量限制對于我的應(yīng)用場景也不會造成太大影響。花生棒雖然有種種限制和不足,但是好在方便易用,適合不喜歡折騰的,或者采用其他方案折騰失敗的用戶。
域名解析
到目前為止,你應(yīng)該有一個(gè)外網(wǎng)可以訪問的Home Assistant 服務(wù)了。如果你是公網(wǎng)IP,那么你的訪問地址很可能是IP加端口號;如果是通過其他方式進(jìn)行內(nèi)網(wǎng)穿透,那么你得到的訪問地址可能是一個(gè)內(nèi)網(wǎng)穿透服務(wù)商的二級域名加端口號。無論哪種方式,都不如使用一個(gè)自己的域名來的方便和親切。因此我們最好注冊一個(gè)自己的域名。
域名服務(wù)提供商有很多,其注冊方式也大同小異。價(jià)格上也基本沒有太大區(qū)別。我是在萬網(wǎng)注冊的域名,萬網(wǎng)目前已經(jīng)納入阿里云旗下,成為其子產(chǎn)品之一。傳統(tǒng)的大家比較熟悉的com、net的域名價(jià)格偏高。另外一些比如xyz、site、fun、online這些易記住的域名雖然首年價(jià)格很低,但是續(xù)費(fèi)價(jià)格略高。通過篩選,我建議使用top域名,名字既響亮,價(jià)格也很合理,三年只需要67元,續(xù)費(fèi)價(jià)格則為78元。域名購買完畢后,就進(jìn)入域名控制臺,添加一條解析。
如果你是公網(wǎng)IP地址,那么需要添加一條A解析。如下圖所示。
記錄類型選擇:A,主機(jī)記錄填寫的是你想要訪問的地址,記錄值就是你的公網(wǎng)IP。添加完畢后,就可以通過你的域名地址加原來的端口號訪問Home Assistant。
如果你已經(jīng)有一個(gè)可以訪問Home Assistant 的二級域名,那么需要添加一條CNAME解析。如下圖所示。
記錄類型選擇CNAME,主機(jī)記錄和上面一樣,你也可以有不同的選擇,不同值所對應(yīng)的含義可以通過點(diǎn)擊右邊的那個(gè)問號查看。記錄值填寫那個(gè)可以訪問Home Assistant 的二級域名。設(shè)置并添加完畢后,效果同上,不再贅述。
至此,你應(yīng)該有一個(gè)屬于你自己的個(gè)性化的訪問Home Assistant的域名了。
貓精接入史
在繼續(xù)進(jìn)行下去之前,我覺得有必要講述一下天貓精靈接入Hone Assistant的過去和現(xiàn)狀。這樣我們就能了解為了讓天貓精靈接入Home Assistant,Hassbian的諸位熱心網(wǎng)友做了多少付出和貢獻(xiàn)。
最早的時(shí)候,天貓精靈接入Home Assistant是通過在天貓精靈開放平臺自定義技能實(shí)現(xiàn)的。這種方法的靈活性和擴(kuò)展性都很好。但是這種方式需要使用者自己搭建PHP代理網(wǎng)關(guān),并實(shí)現(xiàn)OAuth2認(rèn)證。如果你有網(wǎng)站架設(shè)經(jīng)驗(yàn),那么可能這對你來說不是什么有難度的事情。但是對于雖身為程序員,但從未涉足Web開發(fā)的我來說,依然經(jīng)歷了從信心滿滿dao到黯然放棄的過程。
接著第二種接入方法出現(xiàn)了。由于天貓精靈官方支持了飛利浦Hue燈,因此可以通過HaBridge將設(shè)備模擬成Hue,從而實(shí)現(xiàn)對設(shè)備的控制。這種方法可以免去搭建PHP 代理網(wǎng)關(guān)和實(shí)現(xiàn)OAuth2認(rèn)證的步驟,大大降低了實(shí)現(xiàn)的難度。然而這種方法本質(zhì)上是把設(shè)備模擬成燈,因此無法實(shí)現(xiàn)對設(shè)備更為豐富的控制命令。
然后,一種更為便捷的接入方式出現(xiàn)了。Hassbian熱心網(wǎng)友將第一種接入實(shí)現(xiàn)方式的代碼貢獻(xiàn)給論壇,并由論壇官方架設(shè)了一臺服務(wù)器,以供廣大網(wǎng)友使用。使用者只需要填入自己的外網(wǎng)訪問地址和訪問密碼,就能將天貓精靈方便地接入Home Assistant。這就相當(dāng)于論壇把頗有難度的幾個(gè)步驟代替大家完成了,并貢獻(xiàn)服務(wù)器出來為大家所用。我曾長期使用這種方式,將天貓精靈接入Home Assistant。如果不想繼續(xù)折騰,那么這也是我推薦的方式。在我撰寫本文的過程中,站內(nèi)已經(jīng)有值友對這種方法整理成文,感興趣的可以參考。
家庭婦男的智能家居折騰之路—與君子動(dòng)口不動(dòng)手只差四步,天貓精靈控制HA設(shè)備
小編注:想獲得更多專屬福利嗎?金幣加成、尊享眾測、專屬勛章、達(dá)人福利任務(wù)你想要嗎?如果想要,趕緊來申請認(rèn)證站內(nèi)生活家!猛擊此鏈接很多值友在前幾篇家庭婦男的智能家居折騰之路系列文章下留言,表達(dá)了折騰智能家居完全沒有必要的觀點(diǎn)。的確,現(xiàn)階段的智能家居確實(shí)不夠智能,甚至有些智障。舉個(gè)例子,只要你吩咐一聲,
NetYJ
|
贊2
評論17
收藏57
查看詳情
然而通過利用Hassbian的服務(wù)器實(shí)現(xiàn)天貓精靈接入Home Assistant依然存在些許不足。首先,論壇所搭設(shè)的服務(wù)器采用的Home Assistant安全驗(yàn)證方式是legacy_api_password。目前,最新版的Home Assistant將逐步移除這種不安全的驗(yàn)證方式,轉(zhuǎn)而采用Long-Lived Access Tokens的方式。雖然代碼原作者已經(jīng)增加了兩種驗(yàn)證方式的支持,但是我一段時(shí)間前驗(yàn)證的時(shí)候,Hassbian論壇所提供的服務(wù)并沒有合入這部分更新,現(xiàn)在不知道是否支持了。其次,利用這種方式,相當(dāng)于將天貓精靈的指令請求先轉(zhuǎn)發(fā)到Hassbian的服務(wù)器,再發(fā)送給天貓精靈的服務(wù)器。據(jù)我所知,Hassbian的服務(wù)器是架設(shè)在海外的。如果家里的網(wǎng)絡(luò)跟Hassbian的服務(wù)器連接狀況不好的話,就會影響天貓精靈對指令響應(yīng)的實(shí)時(shí)性和穩(wěn)定性。
既然問題出現(xiàn)了,那么就必然會出現(xiàn)解決問題的人。首先膜拜一下這位大神:點(diǎn)我前去膜拜。這位大神是Home Assistant官方OAuth2認(rèn)證系統(tǒng)締造者。曾經(jīng)擋在許多人面前的OAuth2認(rèn)證的搭建,終于能夠被新版本的Home Assistant原生支持了。既然我們已經(jīng)有Home Assistant幫我們做好了OAuth2認(rèn)證,所以只需要自己再實(shí)現(xiàn)一個(gè)網(wǎng)關(guān)就好了。
這一段內(nèi)容可能對于很多沒有相關(guān)基礎(chǔ)的人來說有些難以理解。沒關(guān)系,我們繼續(xù)往下走。
SSL證書申請
在上上一個(gè)章節(jié)里面,我們已經(jīng)有了一個(gè)可以外網(wǎng)訪問Home Assistant的域名,這個(gè)域名一般情況下都是HTTP協(xié)議的。但是如果想讓天貓精靈能夠順利接入Home Assistant,我們需要的是一個(gè)加密的HTTPS的地址。為了實(shí)現(xiàn)這個(gè)目的,我們需要申請和部署SSL證書。
SSL證書的申請,很多人可能都會選擇Let's Encrypt。Let's Encrypt是一個(gè)證書授權(quán)機(jī)構(gòu),我們可以利用它的獲取證書的客戶端Certbot,免費(fèi)快速地獲取Let's Encrypt證書。具體方法本文不打算展開,網(wǎng)上也有很多教程,可以搜索并參考。
我并沒有使用Let's Encrypt的證書。由于我的域名是在阿里云萬網(wǎng)上申請注冊的,因此我就直接阿里云上申請證書了。具體的步驟如下。
1.進(jìn)入阿里云的管理控制臺,并在"產(chǎn)品與服務(wù)"中"安全(云盾)"中找到"SSL證書(應(yīng)用安全)"。不得不說,阿里云產(chǎn)品太多了,找都不好找。
2.點(diǎn)擊右上角的購買證書進(jìn)入證書購買頁面。
3.一般的商用的SSL證書價(jià)格都很昂貴。當(dāng)然,我們只要免費(fèi)的。證書品牌選擇"Symantec",證書類型先點(diǎn)一下"增強(qiáng)型OV SSL",然后選擇"免費(fèi)型DV SSL",然后價(jià)格就變成0.00元了。點(diǎn)擊立即購買。
4.購買完畢后回到控制臺,你購買的證書就出現(xiàn)在證書列表里,想使用的話還需要進(jìn)一步補(bǔ)全信息。
5.證書綁定域名就是訪問Home Assistant的域名。因?yàn)槲沂窃诎⒗镌迫f網(wǎng)申請的域名,所以域名驗(yàn)證方式直接選擇"自動(dòng)DNS驗(yàn)證"。只要域名使用阿里云DNS,都可以通過這種方式驗(yàn)證。當(dāng)前操作后,系統(tǒng)自動(dòng)調(diào)用云解析API添加一條記錄,完成域名授權(quán)驗(yàn)證,十分便捷。CSR生成方式選擇"系統(tǒng)生成"即可。然后點(diǎn)擊下一步,進(jìn)入驗(yàn)證界面。
6.在這個(gè)界面點(diǎn)擊驗(yàn)證,不出什么意外都會成功。這時(shí),在你的域名解析設(shè)置頁面會多一條TXT記錄,就是上面所說的用來完成域名授權(quán)驗(yàn)證的。
7.證書申請?zhí)峤缓螅却龑徍送瓿伞徍送戤叄涂梢栽?已簽發(fā)"中找到通過審核的證書。點(diǎn)擊下載,選擇其他類型將證書下載到本地,準(zhǔn)備做進(jìn)一步部署。
注意,證書是存在有效期的,用上面的方法申請到的證書有效期是1年。到期需要重新申請證書并在服務(wù)器上更換證書。
SSL證書配置
將上一步下載的證書解壓,會得到一個(gè)key文件和一個(gè)per文件。使用文本編輯器打開這兩個(gè)文件,并按照下面的格式合并為一個(gè)文件,并保存為your.cert
-----BEGIN RSA PRIVATE KEY-----
XXXX
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
XXXX
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
XXXX
-----END CERTIFICATE-----
把key文件和cert文件和傳到你部署Home Assistant的服務(wù)器上。在Home Assistant的配置文件configuration.yaml中添加如下內(nèi)容,根據(jù)你的實(shí)際情況做修改:
http:
ssl_certificate: /path/to/your/cert_file
ssl_certificate: /path/to/your/key_file
完成上述設(shè)置后,重啟你的Home Assistant,你就可以通過HTTPS訪問之前的域名了。
接入實(shí)戰(zhàn)
從這一部分開始,進(jìn)入了本文最重要的部分。原貼請參考這里:點(diǎn)我直達(dá)。希望你前面的準(zhǔn)備工作已經(jīng)做好了,并利用Home Assistant接入了一些智能家居,且配置正確、使用正常。
網(wǎng)關(guān)配置
完成HTTPS域名訪問后,就給我們進(jìn)行接下來的配置掃清了一切障礙了。首先,我們要先實(shí)現(xiàn)網(wǎng)關(guān),從此地址下載代碼到Home Assistant配置目錄的custom_components子目錄下。感謝原作者。
然后在configuration.yaml里面加入下面的內(nèi)容:
aligenie:
expire_hours: 8760
expire_hours意思是多少個(gè)小時(shí)后需要重新進(jìn)行授權(quán)。expire_hours的默認(rèn)值是8760小時(shí),即365天,和SSL證書過期時(shí)間一致。注意,即使有默認(rèn)值,此項(xiàng)配置也不能省略,這樣才能讓插件正常工作。同時(shí),為了方便后續(xù)的調(diào)試工作,請將log級別調(diào)整為info,在configuration.yaml加入:
logger:
default: info
這個(gè)自定義的插件就是我們要實(shí)現(xiàn)的網(wǎng)關(guān)。現(xiàn)在把它以插件的形式集成到Home Assistant中,省去了額外搭建網(wǎng)關(guān)服務(wù)的步驟。
額外配置
此時(shí)你可能已經(jīng)配置好了你的Home Assistant,并添加了一些智能家居設(shè)備。但是,為了讓天貓精靈識別這些設(shè)備,還需要進(jìn)行一些額外的設(shè)置。原文請參考這里:點(diǎn)我直達(dá)。
我以我的松下吸頂燈為例,講解一下如何進(jìn)行額外的配置。我這個(gè)吸頂燈可以通過紅外遙控器控制開關(guān),我利用博聯(lián)黑豆對它進(jìn)行控制。其實(shí)天貓精靈是原生支持博聯(lián)黑豆的,但是博聯(lián)黑豆的支持設(shè)備列表里面沒有我這臺松下吸頂燈。所以只能依靠Home Assistant曲線救國了。在Home Assistant中,我的這臺吸頂燈的配置如下,也就是很基礎(chǔ)的博聯(lián)設(shè)備的配置方法。
switch:
- platform: broadlink
host: 192.168.50.233
mac: '44:44:44:44:44:44'
timeout: 15
switches:
panasonic_light:
command_on: 'xxxxxxxxxxx'
command_off: 'xxxxxxxxxxx'
為了讓天貓精靈能夠識別這個(gè)設(shè)備,還需要填寫以下三個(gè)重要字段,且每個(gè)字段都有固定的名稱列表,不能隨意修改:
1. hagenie_zone:此字段指代你設(shè)備所處的區(qū)域,如客廳、餐廳等,可選值參考這里:點(diǎn)我直達(dá)。
2. hagenie_deviceName:此字段指代你的設(shè)備名稱,可選值參考這里:點(diǎn)我直達(dá)。
3. hagenie_deviceType:此字段指代你的設(shè)備類型,可選值參考這里:點(diǎn)我直達(dá)。
當(dāng)跟天貓精靈進(jìn)行語音交互式,hagenie_zone和hagenie_deviceName是比較重要的字段,再次強(qiáng)調(diào),務(wù)必從可選值列表中選取。比如我的客廳的松下吸頂燈的額外配置為:
switch.panasonic_light:
friendly_name: 客廳燈
hagenie_deviceName: 燈
hagenie_deviceType: light
將此段配置放置到customize.yaml中。我如果想通過天貓精靈控制這個(gè)吸頂燈,就可以說:天貓精靈,打開客廳吸頂燈。如果吸頂燈只有一個(gè),也可以省去說出"客廳"兩個(gè)字。
我再以我的小米空氣凈化器2示范一下如何配置。首先,小米空氣凈化器在Home Assistant中的配置如下。
fan:
- platform: xiaomi_miio
name: Xiaomi Air Purifier 2
host: 192.168.50.233
token: 000000000000000000000000
model: zhimi.airpurifier.m1
然后為了適配天貓精靈網(wǎng)關(guān)的額外配置如下。
fan.xiaomi_air_purifier_2:
friendly_name: 客廳空氣凈化器
hagenie_deviceName: 空氣凈化器
hagenie_deviceType: airpurifier
最好將配置放到customize.yaml下,這樣比較規(guī)范。完成了這一步后,我們離成功越來越近了。
AliGenie開發(fā)者平臺配置
Home Assistant這邊配置完畢后,我們還需要在AliGenie開發(fā)者平臺進(jìn)行進(jìn)一步配置。AliGenie開發(fā)者平臺就是阿里天貓精靈的開發(fā)者平臺,其地址在此:點(diǎn)我直達(dá)。使用你登錄手機(jī)端天貓精靈App的賬號登錄AliGenie開發(fā)者平臺,并進(jìn)入控制臺。
點(diǎn)擊"添加新技能"進(jìn)入技能創(chuàng)建頁面。技能信息里面的東西可以自行根據(jù)情況填寫,沒有什么特殊要求。填寫完畢后點(diǎn)擊下一步。
服務(wù)設(shè)置里面則是重點(diǎn),首先要進(jìn)行OAuth2的設(shè)置。最新版本的Home Assistant已經(jīng)自帶OAuth2,并且我們實(shí)現(xiàn)了網(wǎng)址的HTTPS訪問,因此在OAuth2設(shè)置中填入如下內(nèi)容,根據(jù)你的實(shí)際情況做修改,其中Client Secret可以隨意填寫:
賬戶授權(quán)連接
Client ID
Client Secret:itdoesnotmatter
Access Token URL
接著,在設(shè)備管理設(shè)置中填入如下內(nèi)容,根據(jù)你的實(shí)際情況做修改:
開發(fā)者網(wǎng)關(guān)地址
正是因?yàn)殚_發(fā)者平臺要求填寫OAuth2和網(wǎng)關(guān)地址的時(shí)候,必須是HTTPS的網(wǎng)址,所以才有了申請并部署SSL,讓Home Assistant支持HTTPS訪問這一步驟。此頁面余下的內(nèi)容可以不用理會。
模擬真機(jī)測試
完成上述設(shè)置后點(diǎn)擊下一步進(jìn)入"測試驗(yàn)證"頁面,開啟真機(jī)測試。
這時(shí)你可以點(diǎn)擊“在新窗口打開”,網(wǎng)頁會跳出如下彈出窗口。
點(diǎn)擊“賬戶配置”,如果你之前的網(wǎng)關(guān)搭建并運(yùn)行都沒有錯(cuò)誤的話,會進(jìn)入授權(quán)頁面,此時(shí)需要輸入你Home Assistant的用戶名和密碼。
完成賬戶授權(quán)驗(yàn)證后,如果一切正常,貴顯示等待三秒返回設(shè)備列表。
等待三秒鐘,不出意外的話,在設(shè)備列表中,除了你原來在天貓精靈中添加的智能家居設(shè)備,你應(yīng)該也可以看到你在Home Assistant中配置的智能家居設(shè)備了。比如我在Home Assistant中添加的設(shè)備如下。
那么返回的設(shè)備列表應(yīng)該是這樣的,前提是你為這些設(shè)備進(jìn)行了額外配置,請參照上面的相關(guān)章節(jié)。
同時(shí),打開你手機(jī)端的天貓精靈App,在智能家居列表里刷新,正常情況下,Home Assistant中的設(shè)備也會出現(xiàn)在這里了。這時(shí),去嘗試一下語音控制你的設(shè)備吧。
至此,恭喜你,基本大功告成。當(dāng)然你的過程可能并沒有那么順利。如果遇到問題,請仔細(xì)分析相關(guān)日志,認(rèn)真檢查每一步的配置。另外需要注意的是,完成測試驗(yàn)證后,不需要提交審核,保持現(xiàn)狀即可。
祝君好運(yùn)。
簡化歸納
上面寫了一大段又一大段文字,初次接觸的朋友可能一下子難以接受,我在本小節(jié)將上面的各個(gè)步驟進(jìn)行簡單的歸納,以方便你的理解。
天貓精靈接入Home Assistant的基本步驟如下:
通過上面的歸納總結(jié),希望你能對整體的過程有一個(gè)大概的認(rèn)識,具體步驟還要去每個(gè)小章節(jié)中仔細(xì)查閱。
寫在最后
本文介紹的是天貓精靈的Home Assistant接入方式。如果你有小度智能音箱,也有類似的接入方法,具體可以在hassbian論壇里面搜索相關(guān)教程。對于完美沒有相關(guān)基礎(chǔ)的人來說,實(shí)踐這些步驟是有些困難的。而那些之前折騰過Home Assistant的朋友,估計(jì)弄起來會比較容易一些。但是,也依然免不了遇到這樣或者那樣的問題。如果遇到問題,我建議首先仔細(xì)參閱各種教程,檢查自己的配置。然后利用系統(tǒng)日志幫你判斷分析問題。
雖然折騰的過程有些枯燥,也會經(jīng)常遇到各種困難。但是通過自己的努力,排除萬難,最終實(shí)現(xiàn)天貓精靈控制各種家用電器那一刻,感覺還是很值得的。當(dāng)然也不排除由于某些原因?qū)е路磸?fù)嘗試,不斷糾錯(cuò)仍然無法成功。當(dāng)你遇到這種情況,沒關(guān)系,享受折騰的過程并坦然放棄就行。每次的失敗都會幫助你積累經(jīng)驗(yàn),等再有機(jī)會的時(shí)候,從頭再來就好了。人生不就是各種折騰嘛。
最后,再次感謝那些為達(dá)成天貓精靈接入Home Assistant這個(gè)目的而勤勞付出的各位程序員。
*請認(rèn)真填寫需求信息,我們會在24小時(shí)內(nèi)與您取得聯(lián)系。