PHP代码整理
php临时服务器
进入到对应目录下
命令行执行
php -S 127.0.0.1:8000
参数 -t 可以指定web根目录
参数 --ini 可以指定php配置文件
使用php缓冲获取输出数据到变量
//开始输出缓冲区
ob_start();
//数据数据操作-开始
echo '123456';
//数据数据操作-结束
//获取缓冲区的内容
$dumpData = ob_get_clean();
print_r($dumpData);
获取随机串
function getRandStr($length = 8)
{
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, strlen($characters) - 1)];
}
return $randomString;
}
AES加密解密
//AES加密
function AESencrypt($input, $aesKey)
{
$data = openssl_encrypt($input, 'AES-128-ECB', $aesKey, OPENSSL_RAW_DATA);
$data = base64_encode($data);
return $data;
}
//AES解密
function AESdecrypt($sStr, $aesKey)
{
$decrypted = openssl_decrypt(base64_decode($sStr), 'AES-128-ECB', $aesKey, OPENSSL_RAW_DATA);
return $decrypted;
}
封装的get请求
function vGet($url, $timeout = 5000)
{
if (!function_exists('curl_init')) {
return false;
}
if (substr($url, 0, 7) != 'http://' && substr($url, 0, 8) != 'https://') {
return false;
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_NOBODY, 0); // 显示返回的body区域内容
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, $timeout); //设置连接等待毫秒数
curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); //设置超时毫秒数
// curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //修复56错误码
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 获取的信息以文件流的形式返回
$content = curl_exec($curl); //返回结果
curl_close($curl);
return $content;
}
封装的post请求
function vPost($url, $data, $timeout = 5000,$header=[])
{
if (!function_exists('curl_init')) {
return false;
}
if (substr($url, 0, 7) != 'http://' && substr($url, 0, 8) != 'https://') {
return false;
}
$headerArr = [];
foreach( $header as $n => $v ) {
$headerArr[] = $n.':'.$v;
}
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_NOBODY, 0); // 显示返回的body区域内容
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
curl_setopt($curl, CURLOPT_NOSIGNAL, 1); //注意,毫秒超时一定要设置这个
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT_MS, $timeout); //设置连接等待毫秒数
curl_setopt($curl, CURLOPT_TIMEOUT_MS, $timeout); //设置超时毫秒数
if(count($headerArr)>0) {
curl_setopt($curl, CURLOPT_HTTPHEADER, $headerArr);//设置HTTP头
}
// curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); //修复56错误码
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); // 获取的信息以文件流的形式返回
$content = curl_exec($curl); //返回结果
curl_close($curl);
return $content;
}
php密码强度检测封装方法
//密码强度检测
public static function isPasswordSecureOne(&$errMsg = '', $password = '')
{
$errMsg = '';
if (preg_match("/\s/", $password)) {
$errMsg = '密码不能含有空格等空白符';
return false;
}
if (preg_match("/\(|\)|\[|\]|\{|\}/", $password)) {
$errMsg = '密码不能含有括号';
return false;
}
if (!preg_match('/^(?![a-zA-Z]+$)(?![A-Z0-9]+$)(?![A-Z\W_]+$)(?![a-z0-9]+$)(?![a-z\W_]+$)(?![0-9\W_]+$)[a-zA-Z0-9\W_]{6,32}$/', $password)) {
$errMsg = '密码强度不小于6位不大于64位,至少包含字母、数字、大写字母、小写字母、特殊字符当中的三种';
return false;
}
return true; // 密码强度足够
}
php实现mysqlAES函数一致的加解密
//兼容mysqlaes的加密
function aesEncryptHex($data = '', $key = '')
{
$iv = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
$encrypted = openssl_encrypt($data, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, $iv);
return bin2hex($encrypted);
}
//兼容mysqlaes的解密
function aesDecryptHex($data_hex = '', $key = '')
{
$encrypted = hex2bin($data_hex);
return openssl_decrypt($encrypted, 'aes-128-cbc', $key, OPENSSL_RAW_DATA, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0");
}
备份数据表到SQL语句
/**
* 备份数据表到SQL语句
* @param string $tableName 表名
* @param string &$errMsg 错误信息引用
* @param string &$sqlStr 生成的SQL字符串引用
* @param bool $insertOnly 是否只返回INSERT语句,默认false(返回完整SQL)
* @param int $limit 每次查询的数据量,默认1000条
* @return bool 操作是否成功
*/
public static function backupTableToSql($tableName, &$errMsg = null, &$sqlStr = null, $insertOnly = false, $limit = 1000)
{
$db = Yii::$app->db;
$sql = "";
$success = false;
$errMsg = '';
$sqlStr = '';
// 验证表名不能为空
if (empty($tableName) || !is_string($tableName)) {
$errMsg = '表名不能为空且必须为字符串';
return false;
}
try {
// 1. 获取表结构
$tableSchema = $db->getTableSchema($tableName);
if (!$tableSchema) {
throw new Exception("Table '{$tableName}' does not exist.");
}
// 2. 如果不是只返回INSERT语句,则添加表结构
if (!$insertOnly) {
$sql .= "-- -----------------------------------------------------\n";
$sql .= "-- Table structure for table `{$tableName}`\n";
$sql .= "-- -----------------------------------------------------\n";
$createTable = $db->createCommand("SHOW CREATE TABLE `{$tableName}`")->queryOne();
$sql .= $createTable['Create Table'] . ";\n\n";
$sql .= "--\n-- Dumping data for table `{$tableName}`\n--\n\n";
}
$offset = 0;
$total = $db->createCommand("SELECT COUNT(*) FROM `{$tableName}`")->queryScalar();
if ($total > 0) {
if (!$insertOnly) {
$sql .= "LOCK TABLES `{$tableName}` WRITE;\n";
$sql .= "/*!40000 ALTER TABLE `{$tableName}` DISABLE KEYS */;\n";
}
while ($offset < $total) {
$rows = $db->createCommand("SELECT * FROM `{$tableName}` LIMIT {$offset}, {$limit}")
->queryAll();
foreach ($rows as $row) {
$values = [];
foreach ($row as $value) {
if ($value === null) {
$values[] = 'NULL';
} elseif (is_numeric($value)) {
$values[] = $value;
} else {
$values[] = $db->quoteValue($value);
}
}
$sql .= "INSERT INTO `{$tableName}` VALUES (" . implode(', ', $values) . ");\n";
}
$offset += $limit;
}
if (!$insertOnly) {
$sql .= "/*!40000 ALTER TABLE `{$tableName}` ENABLE KEYS */;\n";
$sql .= "UNLOCK TABLES;\n";
}
}
if (!$insertOnly) {
$sql .= "\n-- Dump completed on " . date('Y-m-d H:i:s') . "\n";
}
$sqlStr = $sql;
$success = true;
} catch (\Throwable $e) {
$errMsg = "备份表 {$tableName} 失败: " . $e->getMessage();
$success = false;
}
return $success;
}
将多个SQL文件打包成ZIP压缩包
/**
* 将多个SQL文件打包成ZIP压缩包
* @param array $sqlFiles 要打包的SQL文件路径数组
* @param string $outputZip 输出的ZIP文件路径
* @param string $password ZIP文件密码(可选)
* @param bool $deleteSource 是否在打包后删除源文件,默认false
* @param string &$error 错误信息引用
* @return bool 操作是否成功
*/
public static function packageSqlFilesToZip(&$error = '', $sqlFiles = [], $outputZip = '', $password = '', $deleteSource = true)
{
// 检查ZipArchive类是否存在
if (!class_exists('ZipArchive')) {
$error = 'Zip扩展未启用';
return false;
}
// 验证输入文件
if (empty($sqlFiles) || !is_array($sqlFiles)) {
$error = 'SQL文件列表不能为空且必须为数组';
return false;
}
// 检查所有文件是否存在
foreach ($sqlFiles as $keyfile => $valfile) {
if (!file_exists($valfile)) {
unset($sqlFiles[$keyfile]);
}
}
if (empty($sqlFiles)) {
$error = 'SQL文件列表不能为空';
return false;
}
// 创建输出目录(如果不存在)
$outputDir = dirname($outputZip);
if (!is_dir($outputDir) && !@mkdir($outputDir, 0755, true)) {
$error = "无法创建输出目录: {$outputDir}";
return false;
}
// 创建ZIP文件
$zip = new \ZipArchive();
if ($zip->open($outputZip, \ZipArchive::CREATE | \ZipArchive::OVERWRITE) !== true) {
$error = "无法创建ZIP文件: {$outputZip}";
return false;
}
// 设置ZIP密码(如果提供)
if (!empty($password) && !$zip->setPassword($password)) {
$error = '设置ZIP密码失败';
$zip->close();
@unlink($outputZip);
return false;
}
// 添加文件到ZIP
foreach ($sqlFiles as $file) {
$filename = basename($file);
if (!$zip->addFile($file, $filename)) {
$error = "添加文件到ZIP失败: {$file}";
$zip->close();
@unlink($outputZip);
return false;
}
// 如果设置了密码,为每个文件单独设置加密
if (!empty($password)) {
$zip->setEncryptionName($filename, \ZipArchive::EM_AES_256, $password);
}
}
// 关闭ZIP文件
if (!$zip->close()) {
$error = '保存ZIP文件失败';
if (file_exists($outputZip)) {
@unlink($outputZip);
}
return false;
}
// 验证ZIP文件是否创建成功
if (!file_exists($outputZip) || filesize($outputZip) === 0) {
$error = 'ZIP文件创建失败或文件为空';
if (file_exists($outputZip)) {
@unlink($outputZip);
}
return false;
}
// 如果启用了删除源文件,且ZIP文件验证通过
if ($deleteSource) {
foreach ($sqlFiles as $file) {
if (file_exists($file)) {
@unlink($file);
}
}
}
return true;
}
去除PHP代码文件中的注释及空行
function removeCommentsAndNormalizeNewlines($code) {
// 1. 移除单行注释 //
$code = preg_replace('/\/\/.*$/m', '', $code);
// 2. 移除 # 开头的单行注释(PHP 也支持)
$code = preg_replace('/^#.*$/m', '', $code);
// 3. 移除多行注释 /* ... */
$code = preg_replace('/\/\*.*?\*\//s', '', $code);
// 4. 移除行尾空白(可选,让代码更整洁)
$code = preg_replace('/[ \t]+$/m', '', $code);
// 5. 删除所有“空行”(包括只含空格、制表符、换行符的行)
$code = preg_replace('/^\s*[\r\n]+/m', '', $code);
// 6. 移除开头和结尾可能残留的空白字符(包括换行)
$code = trim($code);
// 可选:在文件末尾加一个换行符(符合 POSIX 标准)
$code .= "\n";
return $code;
}
// 示例:处理单个文件
function processFile($filePath) {
if (!file_exists($filePath)) {
echo "文件不存在: $filePath\n";
return;
}
$content = file_get_contents($filePath);
$cleaned = removeCommentsAndNormalizeNewlines($content);
// 可选:备份原文件
// copy($filePath, $filePath . '.bak');
file_put_contents($filePath, $cleaned);
echo "✅ 已处理: $filePath\n";
}
// 批量处理目录下所有 .php 文件
function processDirectory($dir) {
$files = glob("$dir/*.php");
foreach ($files as $file) {
processFile($file);
}
}
// 使用示例:
processDirectory('./src');
去除PHP代码文件中的注释并将多个连续空行压缩为单个空行
function removeCommentsAndNormalizeNewlines($code) {
// 1. 移除单行注释 //
$code = preg_replace('/\/\/.*$/m', '', $code);
// 2. 移除 # 开头的单行注释(PHP 也支持)
$code = preg_replace('/^#.*$/m', '', $code);
// 3. 移除多行注释 /* ... */
$code = preg_replace('/\/\*.*?\*\//s', '', $code);
// 4. 移除行尾空白(可选,让代码更整洁)
$code = preg_replace('/[ \t]+$/m', '', $code);
// 5. 将多个连续空行(包括只含空白字符的行)压缩为一个空行
$code = preg_replace('/(\r?\n)([\r\n\s]*\r?\n)+/', "$1$1", $code);
// 6. 移除文件开头和结尾多余的空行
$code = trim($code) . "\n";
return $code;
}
// 示例:处理单个文件
function processFile($filePath) {
if (!file_exists($filePath)) {
echo "文件不存在: $filePath\n";
return;
}
$content = file_get_contents($filePath);
$cleaned = removeCommentsAndNormalizeNewlines($content);
// 可选:备份原文件
// copy($filePath, $filePath . '.bak');
file_put_contents($filePath, $cleaned);
echo "✅ 已处理: $filePath\n";
}
// 使用示例:
// processFile('your_file.php');
// 批量处理目录下所有 .php 文件
function processDirectory($dir) {
$files = glob("$dir/*.php");
foreach ($files as $file) {
processFile($file);
}
}
// 使用示例:
processDirectory('./src');
Yii数据表列增加定制字段排序处理
$tmpColumnArr = [
'class' => 'kartik\grid\DataColumn',
'attribute' => 'test' ,
'label' => '测试列',
];
if('paixuxuhao2'==$appfik){
$tmpColumnArr['enableSorting'] = true;
$tmpColumnArr['attribute'] = 'paixuxuhao2';
$tmpColumnArr['encodeLabel'] = false;
$tmpColumnArr['label'] = '<span class="sort-link-paixuxuhao2">' . $appfiv . '</span>';
$getForSortByPaixuxuhao2 = Yii::$app->request->get('sort-by-paixuxuhao2');
if('asc'==$getForSortByPaixuxuhao2){
$tmpColumnArr['label'] .= '<span class="kv-sort-icon"><i class="glyphicon glyphicon-sort-by-attributes"></i></span>';
}else if('desc'==$getForSortByPaixuxuhao2){
$tmpColumnArr['label'] .= '<span class="kv-sort-icon"><i class="glyphicon glyphicon-sort-by-attributes-alt"></i></span>';
}
}
$column[] = $tmpColumnArr;
// 添加排序功能
$(document).on('click', '.sort-link-paixuxuhao2', function(e) {
e.preventDefault();
// 获取当前URL
var currentUrl = window.location.href;
var sortParam = 'sort-by-paixuxuhao2';
var sortValue = 'asc';
// 检查URL中是否已存在排序参数
var url = new URL(currentUrl);
var searchParams = new URLSearchParams(url.search);
if (searchParams.has(sortParam)) {
// 如果存在排序参数,则切换排序方式
sortValue = searchParams.get(sortParam) === 'asc' ? 'desc' : 'asc';
searchParams.set(sortParam, sortValue);
} else {
// 如果不存在排序参数,则添加并设置为asc
searchParams.append(sortParam, sortValue);
}
// 构建新的URL并跳转
url.search = searchParams.toString();
var iload = layer.load(1,{shade:[0.3]});
window.location.href = url.toString();
});