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();
});
冀ICP备2021025979号-1