kenngoldfarb / underscore_libs
_php 库
Requires
- php: >=5.3.0
Requires (Dev)
- phpunit/phpunit: 3.7.*
This package is not auto-updated.
Last update: 2024-09-28 15:11:46 UTC
README
一套实用的、与框架无关的PHP库,使生活更轻松
目标:一组有用、灵活且可在任何框架中使用的库。
安装
Composer
使用composer包管理器,在你的composer.json文件中添加
{ "require": { "kengoldfarb/underscore_libs": "~2.0.0" } }
然后安装它(从与composer.json相同的目录):php composer.phar install
手动安装
您可以下载最新版本,或者您可以只是获取单个库的源代码并将其集成到您的项目中。
用法
在这里,您可以找到有关每个库的信息和示例。这些示例可能无法涵盖库可能使用的所有排列组合。有关更详细的信息,请查看源代码...希望您会发现注释非常详细且易于理解。
- 日志记录: 一个可以记录对象的日志类!
- 加密: 简单的AES或RSA(公钥/私钥)加密
- UUID: 生成和操作uuids
- 数据库(MySQL): 具有一些便利性的MySQL数据库包装类
- 文件: 使文件操作更容易
- 随机: 生成随机数字、字符串。
- ServiceResponse: 用于生成一致的JSON或XML响应的API响应
- 会话: 一个会话包装器,提供额外的错误检查
- SSL: 检查SSL是否激活或要求SSL的方法
- 网络响应: 一些很好的实用工具,如设置P3P头、发送HTTP状态码等。
- 信息: 提取关于网络请求的信息
测试
测试可以在“tests”目录中找到,可以使用phpunit运行。如果您已克隆此存储库,则可以运行测试...
$ cd /path/to/underscore_libs
$ composer install # The location of composer may differ on your computer
$ vendor/bin/phpunit tests/_CryptTest.php # Run the test
### 日志记录 日志库提供日志级别和记录复杂对象的能力。
日志通过php的本地error_log
函数写入。日志消息的位置可能出现在文件、web服务器日志、syslog等,具体取决于您的设置。
通过在php.ini文件中更改error_log设置来调整位置。
选项
您可以在日志记录器上设置以下选项
_Log::$logLevel
默认:DEBUG
日志级别可以设置为以下之一
_\_LogContants::FATAL
_\_LogContants::CRIT
_\_LogContants::WARN
_\_LogContants::INFO
_\_LogContants::DEBUG
一旦设置,所有等于或高于该级别的日志都将被记录。例如,如果我将级别设置为INFO,则不会写入“debug”日志,但会写入“warn”日志。
_Log::$logObjects
默认: TRUE
布尔值。是否记录复杂对象。
_Log::$logEcho
默认: FALSE
布尔值。是否使用PHP的echo
来输出日志消息。对于CLI脚本可能很有用。
_Log::$useExceptions
默认: FALSE
布尔值。如果无法写入错误日志,是否抛出异常。在大多数情况下,你可能希望将其保留为FALSE
示例
use _\_Log; _Log::$logLevel = _\_LogContants::INFO; _Log::debug('This is a debug message that will not be written because of log level'); _Log::info('This is an info message'); _Log::warn('This is a warning message'); _Log::crit('This is a critical message'); _Log::fatal('Oh snap. This is a fatal error message');### 加密
《Crypt》类提供了AES和RSA加密和解密方法。
使用PKCS7填充的AES加密
选项
_Crypt::_encryptAESPKCS7($textToEncrypt, $key, $cipher, $mode)
$textToEncrypt 必需
$key 必需
$cipher 可选
默认: MCRYPT_RIJNDAEL_256 允许的值:MCRYPT_RIJNDAEL_128, MCRYPT_RIJNDAEL_192, MCRYPT_RIJNDAEL_256
$mode 可选
默认: MCRYPT_MODE_CBC 允许的值:MCRYPT_MODE_CBC, MCRYPT_MODE_ECB, MCRYPT_MODE_CFB, MCRYPT_MODE_OFB, MCRYPT_MODE_NOFB, MCRYPT_MODE_STREAM
基本示例
use _\_Crypt; // Set the secret key $secretKey = "MySecretKey123"; // The text to encrypt $textToEncrypt = "How much wood could a woodchuck chuck if a woodchuck could chuck wood?"; // The encrypted text $encryptedText = _Crypt::_encryptAESPKCS7($textToEncrypt, $secretKey); // The decrypted text (will match $textToEncrypt) $decryptedText = _Crypt::_decryptAESPKCS7($encryptedText, $secretKey);
RSA加密(公钥/私钥)
这种加密方式非常适合需要加密但不需在应用程序内部解密的情况。在这种情况下,你可以将解密(私钥)保留在应用程序服务器之外,以增加安全性。
生成RSA公钥/私钥对
生成密钥对。你可以选择传递 $keybits,可以是以下之一:1024, 2048, 4096
$keys = _Crypt::_generateRSAKeys(); $publicKey = $keys['public']; $privateKey = $keys['private'];
RSA加密/解密
$textToEncrypt = "How much wood could a woodchuck chuck if a woodchuck could chuck wood?"; $encryptedText = _Crypt::_encryptRSA($textToEncrypt, $publicKey); $decryptedText = _Crypt::_decryptRSA($encryptedText, $privateKey);### UUID
此库提供了处理UUID(或“通用唯一标识符”)的函数。
生成一个UUID
选项
$withHyphens 默认: TRUE 此单个选项可以传递给控制UUID是否包含连字符的函数。
示例
use _\_UUID; $uuid = _UUID::getUUID();
将UUID字符串转换为二进制表示
示例
use _\_UUID; $uuid = '55a0afe6-0e00-4c08-9fb9-7905f0a106b6'; $binaryUUID = _UUID::charUUIDToBinary($uuid);
将二进制表示的UUID转换为字符串
选项
$withHyphens 默认: TRUE 此单个选项可以传递给控制UUID是否包含连字符的函数。
示例
use _\_UUID; $uuid = '55a0afe6-0e00-4c08-9fb9-7905f0a106b6'; $binaryUUID = _UUID::charUUIDToBinary($uuid); $strUUID = _UUID::binaryUUIDToCharUUID($binaryUUID); // At this point, $uuid == $strUUID### 数据库
mysqli库的包装器。提供常规和静态类接口。在大多数情况下,你希望使用静态接口,它将在你的应用程序中共享DB连接。这有助于防止打开不必要的连接。
公共变量
$mysqli 对于非静态接口,你可以直接访问'mysqli'对象。
注意:以下示例假设你正在使用DB类的静态版本。函数的非静态版本名称相同,但没有开头的下划线。例如,_Log::_query($sql)对应于$db->query($sql)
示例
创建连接
use _\_Db; $host = 'localhost'; $user = 'root'; $pass = 'mysupersecretpassword'; $dbName = 'the_db'; $port = 3306; _Db::_createConnection($host, $username, $password, $dbName, $port);
创建查询,转义它,获取行数并处理行
$sql = "select * from users"; $sql = _Db::_escape($sql); $queryResult = _Db::_query($sql); if($queryResult === FALSE) { // Handle error }else{ $numRows = _Db::_count(); while($row = _Db::getRow()) { // Do something with $row } }
将新行插入到数据库中并获取生成的ID
$sql = "insert into users (name, username) values ('Ken', 'ken')"; $queryResult = _Db::_query($sql); if($queryResult === FALSE) { // Handle error }else{ $userId = _Db::_lastId(); }### 文件
简化了从文件写入和读取的任务
常规方法
- writeToFile($textToWrite, $filename = NULL)
- getFilePermissions($filename = NULL)
- readAllFromFile($filename = NULL)
- readByLineFromFile($filename = NULL)
- deleteFile($filename)
- getTemporaryFileDirectory()
静态方法
- _writeToFile($textToWrite, $filename, $permissions = _FileConstants::READ_WRITE_END_OF_FILE_CREATE)
- _readAllFromFile($filename, $permission = _FileConstants::READ_ONLY)
选项
一些方法允许您传递一个常量,指定文件应使用哪些权限打开。可用的(不言自明)选项有:_FileConstants::READ_ONLY _FileConstants::READ_WRITE _FileConstants::WRITING_ONLY_CREATE _FileConstants::READ_WRITE_TRUNCATE_CREATE _FileConstants::WRITE_ONLY_END_OF_FILE_CREATE _FileConstants::READ_WRITE_END_OF_FILE_CREATE _FileConstants::WRITE_ONLY_BEGIN_OF_FILE _FileConstants::READ_WRITE_BEGIN_OF_FILE _FileConstants::WRITE_ONLY_NO_TRUNCATE_BEGIN_OF_FILE _FileConstants::READ_WRITE_NO_TRUNCATE_BEGIN_OF_FILE
示例
从文件中读取
use _\_File; $fileData = _File::_readAllFromFile('/tmp/myfile.txt'); if($fileData === FALSE) { // Handle error reading from file } echo $fileData;
向文件写入
use _\_File; $writeSuccessful = _File::_writeToFile('Here is some text for myfile.txt', '/tmp/myfile.txt'); if($writeSuccessful) { echo $fileData; }else{ // Hand error writing file }### 信息
通用信息和辅助类。
获取用户的IP地址
获取用户的ip。这应该在负载均衡器后面工作。它将首先检查用于ip地址的 HTTP_X_FORWARDED_FOR
头。如果没有设置,它将使用 REMOTE_ADDR
。
use _\_Info; $userIp = _Info::_getUserIpAddr();
获取当前日期时间,格式适用于MySQL
use _\_Info; $mysqlDatetime = _Info::_mysqlNow();### 随机
获取随机数
_getRand($min, $max)
use _\_Rand; $min = 0; $max = 100; _Rand::_getRand($min, $max);
获取随机字符串
_randString($length, $lettersNumbersOnly = false)
use _\_Rand; $length = 10; // The number of characters in the string $lettersNumbersOnly = true; // String will contain only letters and numbers _Rand::_randString($length, $lettersNumbersOnly);
获取随机字符
_randCharacter($start = 32, $end = 126)
参数
$start 从ASCII字符码开始 $end 结束的ASCII字符码
查看http://www.asciitable.com以获取字符码列表
use _\_Rand;
$randChar = _Rand::_randCharacter();
### 服务响应 此库以一致格式生成json或xml响应。
参数
$objects 待序列化的任何对象。字符串、数字、对象、数组等。 $echoResponse 可选 是否输出响应 $format 可选 'json'或'xml'
成功
_success($objects, $echoResponse = TRUE, $format = 'json')
use _\_ServiceResponse; _ServiceResponse::_success(array('hello' => 'world')); // Result: {"status": "success", "hello": "world"}
失败
_failure($objects, $echoResponse = TRUE, $format = 'json')
use _\_ServiceResponse; _ServiceResponse::_failure(array('reason' => 'server error')); // Result: {"status": "failure", "reason": "server error"}### SSL
待办事项
### 会话待办事项
### 网络响应待办事项
版本控制
此项目将遵循语义版本控制指南;
联系
作者:Ken Goldfarb