php项目本地部署如何保护源代码

需求场景:需要在服务器A绑定证书和域名指向。服务器B上有完整的项目。需要访问域名指向服务器A的网址,跳转到服务器B

步骤:

  1. 服务器A上在域名指向的web根目录下新建入口文件index.php,必须保证web server配置中默认优先访问的文件是index.html。同级目录下再新建index.html文件。index.html文件里面将前端的vue文件引入。
  2. index.php文件中用curl扩展封装好GET、POST、json等几种请求方法,用来抓取服务器B的数据用
  3. 登录信息的cookie处理:因为curl只能抓取数据,而不能是设置cookie生效。所以当我们在index.php里面再做一遍cookie的存储处理:setcookie(‘token’, $token, time() + 18000, “/”);(服务器B的存储已经不起作用了。)第四个参数说明的是当前所有目录都可以存储。
  4. 将用到的各个请求方式进行测试。
  5. 测试没有问题后,将index.php文件加密或者混淆。如何加密和混淆自行百度:https://blog.csdn.net/lorraine_40t/article/details/86569722
  6. 下载文件curl方法另行封装,先将内容写入本地服务器(A),再行下载。
  7. curl 抓取https方法的数据自行封装, 添加参数是否是https。
    上代码:
<?php
$bUrl = 'http://XXX.com';
$rUrl = $_SERVER['REQUEST_URI'];

if ($rUrl == '/') {
    $rUrl = 'admin/index/index';
    header("location: {$_SERVER['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}/index.html");
}
$url = $bUrl . $rUrl;
$rMethod = $_SERVER['REQUEST_METHOD'];

$token = getHeader('token');
if (!empty($token)) { // 如果传值过来了token,将token存入
    setcookie("token", "", time() - 1);
    setcookie('token', $token, time() + 18000, "/");
    $_COOKIE['token'] = $token;
} else { // 反之,从COOKIE读取
    if (!empty($_COOKIE['token'])) {
        $token = $_COOKIE['token'];
    } else {
        $token = null;
    }
}

$json = file_get_contents('php://input');
if (!empty($json)) {
    $rMethod = 'JSON';
}
$header[] = "token: {$token}";
// curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
switch ($rMethod) {
    case 'POST':
        // $header[] = "Content-Type: application/text; charset=utf-8";
        // 如果上传文件
        $postData = $_POST;
        if (!empty($_FILES)) {
            $fileKey = array_keys($_FILES);
            $realpath = realpath($_FILES[$fileKey[0]]['tmp_name']);
            $postData[$fileKey[0]] = new CURLFile($realpath);
        }
        echo httpPostBody($url, $postData, $header);
        die;
    case 'GET':
        $res = httpGet($url, $header);
        $isFalse = json_encode($res);
        if (false === $isFalse) {
            $rootPath = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . 'origin' . DIRECTORY_SEPARATOR . date('Ymd');
            if (!is_dir($rootPath)) {
                mkdir($rootPath);
            }
            $fileName = time() . rand(1000, 9999) . '.xls';
            $downloadPath = $rootPath . DIRECTORY_SEPARATOR . $fileName;
            httpDownload($url, $downloadPath, $header);
//            $u = "location: http://{$_SERVER['HTTP_HOST']}/origin/" . date('Ymd') . '/' . $fileName;
//            echo $u;die;
            header("location: {$_SERVER['REQUEST_SCHEME']}://{$_SERVER['HTTP_HOST']}/origin/" . date('Ymd') . '/' . $fileName);
        } else {
            echo $res;
        }
        die;
    case 'JSON':
        $header[] = "Content-Type: application/json; charset=utf-8";
        $header[] = "Content-Length: " . strlen($json);
        echo httpPostRaw($url, $json, $header);
        die;
    default:
        die('非法访问');
}

function httpPostRaw($url, $jsonString, $header = null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonString);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    ob_start();
    curl_exec($ch);
    $returnContent = ob_get_contents();
    ob_end_clean();
//    $returnCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    return $returnContent;
}

function httpGet($url, $header = null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

function httpPostBody($url, $postData, $header = null)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    $output = curl_exec($ch);
    curl_close($ch);
    return $output;
}

function httpDownload($url, $filePath, $header = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);

    $fp = fopen($filePath, 'w+');
    curl_setopt($curl, CURLOPT_FILE, $fp);
    //这个选项是意思是跳转,如果你访问的页面跳转到另一个页面,也会模拟访问。
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($curl, CURLOPT_TIMEOUT, 50);
    curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
    curl_exec($curl);

    curl_close($curl);
    fclose($fp);
}

function getHeader($name = '', $default = null)
{
    $header = [];
    if (function_exists('apache_request_headers') && $result = apache_request_headers()) {
        $header = $result;
    } else {
        $server = $_SERVER;
        foreach ($server as $key => $val) {
            if (0 === strpos($key, 'HTTP_')) {
                $key = str_replace('_', '-', strtolower(substr($key, 5)));
                $header[$key] = $val;
            }
        }
        if (isset($server['CONTENT_TYPE'])) {
            $header['content-type'] = $server['CONTENT_TYPE'];
        }
        if (isset($server['CONTENT_LENGTH'])) {
            $header['content-length'] = $server['CONTENT_LENGTH'];
        }
    }
    $header = array_change_key_case($header);
    if (is_array($name)) {
        return array_merge($this->header, $name);
    }
    if ('' === $name) {
        return $header;
    }
    $name = str_replace('_', '-', strtolower($name));
    return isset($header[$name]) ? $header[$name] : $default;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值