kenngoldfarb/underscore_libs

2.0.3 2017-07-17 18:08 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:11:46 UTC


README

一套实用的、与框架无关的PHP库,使生活更轻松

http://www.underscorephp.com

目标:一组有用、灵活且可在任何框架中使用的库。

安装

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

许可

MIT