php發展了這么多年,有許多有趣的項目。讓我們擺脫那些討厭的增刪改查,一起來了解這些有趣的項目。
1:php-ai/php-ml,一個高級的PHP的機器學習庫
php-ml是一個使用PHP實現的機器學習庫,包含算法、神經網絡、交叉驗證、預處理、特征提取等人工智能領域中常用的功能方案。
官方還提供了眾多的案例,比如:
- 檢測語言分類
- MNIST 識別手寫字體(標準的人工智能入門項目)
- 垃圾郵件過濾
- 文章分類
- 預測葡萄酒的質量
php-ml有一個完善的文檔,并且有豐富的博客文章。但是這已經是人工智能的領域了,你的知識結構可能一時半會還利用不了。
簡單地用法如下:
require_once __DIR__ . '/vendor/autoload.php';
use PhpmlClassificationKNearestNeighbors;
$samples = [[1, 3], [1, 4], [2, 4], [3, 1], [4, 1], [4, 2]];
$labels = ['a', 'a', 'a', 'b', 'b', 'b'];
$classifier = new KNearestNeighbors();
$classifier->train($samples, $labels);
$classifier->predict([3, 2]);
// return 'b'
2:rindow/rindow-neuralnetworks,一個高級的PHP的神經網絡庫
這也是一個人工智能項目,是一個高級的PHP的神經網絡庫,可以使用PHP實現一個強大的機器學習項目。
它有以下特點:
- 可以輕易地實現DNN、CNN、RNN 和 Attention 機器學習模型
- 和Python的Keras 很相似,可以利用相關經驗
- 提供了機器學習中的機器視覺和自然語言的處理
- 處理性能是tensorflow CPU 的兩倍
- 無需專門的運行環境,可以在任何電腦環境運行
- 附帶有趣的示例程序
并且有相關的計算擴展,用于提高性能。還有對于GPU的擴展,可以利用GPU的計算能力,進一步提高性能,不過目前這一點還在測試階段。
3:rubix/ml,一個高級的PHP的機器學習和深度學習庫
是的, 這里又介紹了一個PHP的人工智能庫。
他有這樣幾個特點:
- 對開發人員很友好的接口方法調用
- 40多種監督或非監督學習方法
- 支持 ETL、預處理和交叉驗證
與上面兩個相比相比,它提供了最多的教程和示例項目 教程和示例項目 ,其中比較有趣的有離婚預測、DOTA2勝率預測等, 并且提供了電報群的交流渠道。
4:nlp-tools/nlp-tools,一個供初學者使用的半高級的自然語言處理庫
這是一個專門用于處理人工智能中自然語言處理領域的庫,他提供的方法相比之前幾個會更低底層一些,但使用起來仍然很優雅。
它內置了多種分類模型,類聚方法,分詞器,數據集等等幾乎這一領取所需的所有工具和數據。
與之前介紹的幾個項目相比,它是專門用來處理自然語言這一領域的,并且對初學者十分友好。有豐富的文檔,內置了齊全的工具和數據。
這里演示一下分詞效果:
include('vendor/autoload.php');
use NlpToolsTokenizersWhitespaceAndPunctuationTokenizer;
$text = "Please allow me to introduce myself
I'm a man of wealth and taste";
$tok = new WhitespaceAndPunctuationTokenizer();
print_r($tok->tokenize($text));
// Array
// (
// [0] => Please
// [1] => allow
// [2] => me
// [3] => to
// [4] => introduce
// [5] => myself
// [6] => I
// [7] => '
// [8] => m
// [9] => a
// [10] => man
// [11] => of
// [12] => wealth
// [13] => and
// [14] => taste
// )
5:workerman/gateway-worker,一個分布式的長鏈接服務框架
GatewayWorker基于Workerman開發的一個項目框架,用于快速開發TCP長連接應用,例如App推送服務端、即時IM服務端、游戲服務端、物聯網、智能家居等等。
與其他的此類方案相比,它提供了這樣幾個無可比擬的優點:
- 內置進程守護,通過簡單的命令行即可穩定運行,無需自己去實現后臺運行或進程守護
- 內置分布式設計,可以在不需要修改任何代碼的情況下,實現分布式部署
- 完善的長鏈接操作,包括給連接綁定UID、給連接綁定分組、維護SESSION等
- 提供標準的系統內推送消息的用法,提供了一個client,可以隨時向gateway網絡中發送消息
gatewayworker幾乎解決了長鏈接開發中的所有痛點,非常好用。要注意的是,他是為長鏈接而設計的框架,如果是短連接(UDP)則需要其他方案。
它的啟動方式如下,無需更多操作,健壯地完成進程守護、平滑重啟。
啟動
以debug(調試)方式啟動
php start.php start
以daemon(守護進程)方式啟動
php start.php start -d
停止
php start.php stop
重啟
php start.php restart
平滑重啟
php start.php reload
查看狀態
php start.php status
6:robmorgan/phinx,一個數據庫遷移工具
什么是數據庫遷移工具呢,你可以先這樣理解,就是一個數據庫導入工具。
一般的如果我們需要導入數據庫,需要先去之前的數據庫導出sql文件,然后到另一個站點上導入sql文件。似乎這是天經地義的,沒什么更好的方法,再好一點也就是做一個一鍵安裝腳本。
其實有更好的方案,就是用數據庫遷移工具phinx,在安裝數據庫時,不需要導出和導入sql文件,而是直接使用phinx提供的方法,設計好表結構,然后通過phinx的命令導入。
這樣有很多好處:
- 更優雅的安裝方式,與系統代碼一起管理,無需導出sql文件
- 支持數據庫升級降級,可以跟隨系統升級,自動對比數據表變化,不用擔心數據丟失
- 支持多款數據庫,在phinx設計的表結構可以直接安裝到MySQL、PostgreSQL、SQLite、SQL Server
phinx絕對是現代的程序安裝解決方案,你值得投入精力去使用它。
它的基本的用法像這樣:
<?php
use PhinxMigrationAbstractMigration;
class CreateUserLoginsTable extends AbstractMigration
{
public function change()
{
// 創建表結構
$table = $this->table('user_logins');
$table->addColumn('user_id', 'integer')
->addColumn('created', 'datetime')
->create();
}
}
7:league/flysystem,一個PHP的萬能的文件存儲操作庫
flysystem是一個PHP的文件操作庫,比如文件的讀取、寫入、目錄列表等等操作。與眾不同的是,他是“萬能的”。其實說它是萬能的有些夸張了,但是他官方支持了以下系統:
- 本地存儲
- FTP存儲
- SFTP存儲
- 內存存儲
- 亞馬遜云存儲
- 谷歌云存儲
- WebDAV存儲
在社區生態中,還支持我們經常接觸的一些系統:
- 阿里云存儲
- 七牛云存儲
- Dropbox存儲
- 騰訊云存儲
- 華為云存儲
等等,如果你需要,也可以自定義驅動。
就像下面的代碼一樣,對文件的操作是通用兼容的,如果需要切換存儲系統,換一個驅動就可以了。
// 設置驅動
$adapter = new LeagueFlysystemLocalLocalFilesystemAdapter($rootPath);
$filesystem = new LeagueFlysystemFilesystem($adapter);
// 操作文件、目錄
$filesystem->write($path, $contents);
$filesystem->read($path);
$filesystem->delete($path);
$filesystem->listContents($path, $recursive);
$filesystem->fileExists($path);
$filesystem->has($path);
$filesystem->lastModified($path);
.....
8:PHP-CPP,一個C++的PHP擴展開發框架
相比介紹的前幾個項目,PHP-CPP并不是一個PHP的擴展或庫,它是一個C++的框架,用來開發PHP擴展。
眾所周知,PHP的擴展開發很困難,你一搜PHP的擴展開發,所有人都告訴你那可怕的Zend API,就像遇見了伏地魔一樣,人們不敢提起它。
PHP-CPP解決了這樣的混亂的Zend API的問題,實際上他解決了很多問題,使用他開發PHP擴展,寫起C++代碼來就像寫PHP一樣,畢竟PHP的語法也參考了C風格。
就像下面這樣,簡單幾行就完成了一個PHP擴展。
#include <phpcpp.h>
#include <IOStream>
void myFunction()
{
Php::out << "example output" << std::endl;
}
extern "C" {
PHPCPP_EXPORT void *get_module() {
static Php::Extension extension("my_extension", "1.0");
extension.add<myFunction>("myFunction");
return extension;
}
}
PHP-CPP還提供了豐富的文檔和注釋,手把手教你如何注冊函數、調用函數、匿名函數、類和對象、解析和構造、魔術方法等。
9:PHP-FPM,一個強大的穩定的HTTP服務框架
很多人總是忽視這個PHP-FPM,甚至嫌棄他。
實際上,PHP-FPM是一個大殺器,
- 穩定的運行
- 豐富的擴展
- 性能進階方案,
在Web中仍然閃閃發光。