分类 cmd 下的文章

如果你的用户访问量较少, 比如你24小时访问一次你的站点 , 可能会出现 send of 5 bytes failed with errno=32 Broken pipe in

这只是一种可能 . 几率很小

如果出现此错误 请到网站根目录/Conf/config.php

打开文件找到

//PDO配置
    'SQL_OPTION' => array(
        PDO::ATTR_CASE => PDO::CASE_NATURAL,
        PDO::ATTR_PERSISTENT => true //长连接
    ),

改为:

//PDO配置
    'SQL_OPTION' => array(
        PDO::ATTR_CASE => PDO::CASE_NATURAL,//把长连接此项删除即可
    ),

原因:

长连接是一种缓存句柄, 他可以让服务器减少产生MYSQL链接, 然而如果你的网站程序很久未使用 MYSQL句柄将会断开, 但 缓存句柄仍然存在, 从而网站会调用一个已经废弃的句柄, 导致通信管道不存在, 产生此错误!

这是一个悲哀的站长故事,因为他没用户

mysqldump导出数据
Windows环境下

创建 online_db.cnf 配置文件

[client]
host=127.0.0.1
port=3306
user=root
password=12345
skip-lock-tables=TRUE #该配置为了备份时不锁库
ignore-table=common.courses1
ignore-table=common.bonuses_old
ignore-table=common.lives
ignore-table=common.live_powers

创建 mysql_back.bat bat文件

set t=%date:~,4%年%date:~5,2%月%date:~8,2%日星期%date:~12,2%%time:~0,2%:%time:~3,2%:%time:~6,2%
D:\server\MySQL\bin\mysqldump.exe  --defaults-extra-file="online_db.cnf" course> "bak\online_course%t%.sql"

如果需要隐藏执行的bat窗口
创建 hide12345.vbs 文件

set ws=WScript.CreateObject("WScript.Shell")
ws.Run "mysql_back.bat",0

现在执行 hide12345.vbs 即可隐藏执行备份了
执行 mysql_back.bat 即可看见备份窗口, 备份完成后自动关闭

注意mysqldump.exe填写本机的正确路径

业务场景说明

  1. 比如扒人家的站点, 图片相对地址一个个的扒很不方便, 通过301重定向简单配置一下可以实现当图片没有下载到对应的相对位置时, 会自动重定向下载
  2. vue容器环境下, 每次发布新版本时, 保证缓存老代码的用户访问不会出现404js文件, 可以考虑一台机器用于存放这部分的js文件

保存到文件 auto_download_image.php

<?php
$host301 = "https://static.zennioptical.com" ;
if ($_SERVER["REQUEST_URI"]=='/' || substr( $_SERVER["REQUEST_URI"] ,strripos($_SERVER["REQUEST_URI"] , "/") )==str_replace(".","",substr( $_SERVER["REQUEST_URI"] ,strripos($_SERVER["REQUEST_URI"] , "/") ))  ){
    header("HTTP/1.1 404 Forbidden");
    echo $_SERVER["REQUEST_URI"] ;
    echo "<hr><a href='https://test.templete.com/b/all-glasses/_/category.html'>https://test.templete.com/b/all-glasses/_/category.html</a> ";
    echo "<hr><a href='https://www.zennioptical.com" . $_SERVER["REQUEST_URI"] . "' target='_blank'>https://www.zennioptical.com" . $_SERVER["REQUEST_URI"] . "</a> ";
    exit ;
}
if ( stripos($_SERVER["REQUEST_URI"] , "?") ){
    $file_url = $host301. substr( $_SERVER["REQUEST_URI"] , 0 ,stripos($_SERVER["REQUEST_URI"] , "?") )   ;
}else{
    $file_url = $host301. $_SERVER["REQUEST_URI"] ;
}
function SaveFileFromUrl($link) {
    echo $link ;
    $file_link = str_replace("//" ,"" , $link) ;
    $file_link = substr($file_link , stripos($file_link,"/")+1 ) ;
    $folder_link = substr($file_link , 0 ,strripos($file_link,"/")+1) ;
    $ch = curl_init ($link);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    $img = curl_exec ($ch);
    curl_close ($ch);

//     $fp = fopen($image_name,'w'); // 下载图片到根目录

    if ( $img ){
        if (!is_dir($folder_link)) mkdir($folder_link , 0777 , true); // 如果不存在则创建
        $fp = fopen($file_link,'wb'); //下载图片到指定文件夹
        fwrite($fp, $img);
        fclose($fp);
//    header("HTTP/1.1 404 Forbidden");
        Header("HTTP/1.1 302 Moved Permanently");
        Header("Location: /" . $file_link );
    }else {
        echo "error" ;
    }


}
SaveFileFromUrl($file_url);

在静态文件目录下保存一个 .htaccess 文件

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews -Indexes
    </IfModule>

    RewriteEngine On

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_URI} (.+)/$
    RewriteRule ^ %1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ ../auto_download_image.php [L]
</IfModule>

为什么有这样奇葩的需求呢, 场景是这样的, 公司当前的系统架构为微服务架构, 然后需要写统计时就非常恶心, 特别是各自分类下的各种支付方式的金额, 然后支付表在另一个服务器上门的数据库, 虽然通过php也可以两边拿数据, 但是写统计时在微服务架构下要多恶心有多恶心, 无法通过一条sql得到结果太过于麻烦, 终于还是在网络上找到了办法, 手动写一遍记录一下

Mysql的跨服务器 关联查询--Federated引擎
1.确认开启Federated引擎

查询FEDERATED功能是否开启:
show ENGINES;

2、如果状态为NO则需修改my.ini文件,增加一行federated配置:

在[mysqld]下面添加 federated,然后重启mysql 

3.建立映射表

注意:
- 表名可以不同,但表结构要完全相同
- ENGINE=InnoDB 要改成 ENGINE=FEDERATED
- 添加最下面一行:CONNECTION='mysql://用户名(数据库用户名):密码(数据库密码)@ip:端口/数据库名/表名'

4.结果(此时数据已经映射过来了)

注意, 虽然可以这样干, 但是会有问题, 每次哪怕查询很少的数据时, 都会把目标的所有数据拉过来, 如果表很小还行, 表很大不适合

RewriteEngine on
# Send Requests To Front Controller...
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^ index.php [L]

# 防止目录浏览
Options All -Indexes