Apache中ServerName优先级关系
实际测试, 如果同一个端口有多个配置时, 和 ServerName 值无关, 如果请求进来的 ServerName 没有配置到, 按靠前加载的第一条虚拟主机设置配置为准, 不管 ServerName 名字是啥, 也不管里面的访问的域名是否在host中有配置, 都没有关系
实际测试, 如果同一个端口有多个配置时, 和 ServerName 值无关, 如果请求进来的 ServerName 没有配置到, 按靠前加载的第一条虚拟主机设置配置为准, 不管 ServerName 名字是啥, 也不管里面的访问的域名是否在host中有配置, 都没有关系
前言
首先这种问题一般不会出现, 但是这个代码是别人写的, 里面相关的情况不是很清除, 网上的答案有很多, 包括在 `config/app.php` 里面在启动的时候被注册了导致的, 我顺着这个放心也查了很久, 最后找到原因, 答案不是这个错误源以及错误表现
执行 `composer install -vvv` 到最后一步时就报错, 错误内容为代码报错, 代码内容大概是服务间登录, 获取token, 然后在配置不存在或者配置的地址不能联网的情况下, 执行这个服务间登录的代码, 就会取不到数据, 那段代码直接去返回的数组的键值, 然后出现了报错
简单来说, 那个服务间的类被实例化就会出错, 因为实例化的时候调用了服务间登录的方法检查方向
1. 网上的答案有很多,包括在 `config/app.php` 里面在启动的时候被注册了导致的, 我顺着这个放心也查了很久
2. 然后我就把检索了所有的代码文件, 看看哪些地方使用了这个类, 后来发现在 `\App\Console\Commands\FixData.php` 中发现了可以的地方, 这个目录下的文件显然是一个自定义命令文件, 在执行laravel的方法时, 所有的命令都会被预加载, 预加载就以为命令中的 `__construct()` 方法, 这个方法体执行了实例化了那个服务间的类文件测试 (证明猜想)
1. 我把那个文件中实例化这个服务间的类给注释掉, 再加一行var_dump([6666]), 重新执行 `composer install` 后不再报错了, 同时打印我调试的值, 正常运行完成
2. 我把那个自定义命令文件的类后面的 `extends Command` 的前面加上注释, 重新执行了测试, 不在被执行这个类了, 我看了下这个自定义类的代码,是用于数据库迁移用途的,所以就这样注释下简单的解决了每次启动服务都实例化的问题总结
laravel中的需要注意, 自定义命令在执行composer install的时候会被扫描, 其中的 所有命令文件中的 `__construct()` 方法都会被实例化index.html
<script src="export_html_table_csv.js"></script>
<div class="auto_table">
<script>
if(typeof openNewTargetHtml == "undefined") {
function openNewTargetHtml(thiss){
var html = thiss.parentNode.parentNode.parentNode.parentNode.children[1].firstElementChild.firstElementChild.innerHTML;
var newwindow = window.open("", "_blank","");
newwindow.document.write(html);
}
}
</script>
<script>
if(typeof exportCSV == "undefined") {
function exportCSV(thiss){
var tableObj = thiss.parentNode.parentNode.parentNode.parentNode.children[1].firstElementChild.firstElementChild.firstElementChild;
downloadCSV(tableObj,'aa.csv');
}
}
</script>
<style>
tr,td{
border: 1px solid #9E9E9E;
text-align: center;
}
table>thead>tr>td{
padding: 10px;
}
table>tbody>tr>td{
border: 1px solid #9E9E9E;
}
table>tbody>tr{
border: 1px solid #9E9E9E;
}
</style>
<script>
if(typeof openNewTargetHtml == "undefined") {
function openNewTargetHtml(thiss){
var html = thiss.parentNode.parentNode.parentNode.parentNode.children[1].firstElementChild.firstElementChild.innerHTML;
var newwindow = window.open("", "_blank","");
newwindow.document.write(html);
}
}
</script>
<style>
tr,td{
border: 1px solid #9E9E9E;
text-align: center;
}
table>thead>tr>td{
padding: 10px;
}
table>tbody>tr>td{
border: 1px solid #9E9E9E;
}
table>tbody>tr{
border: 1px solid #9E9E9E;
}
</style>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="margin: 10px; padding-left: 50%;border-collapse:collapse;font-size: larger;" ><thead><tr><td>用户访问历史 <font style="color: red;">(9)rows </font> <button type="button" onclick="openNewTargetHtml(this)">新标签页打开</button> <button type="button" onclick="exportCSV(this)">导出CSV</button></td></tr></thead><tbody><tr><td>
<table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="margin: 10px; padding-left: 50%;border-collapse:collapse;font-size: larger;" ><thead><tr><td>id</td><td>标""题</td><td>访问时间</td></tr></thead><tbody><tr><td>1333820</td><td>我的\",\"课程</td><td>2020-08-31 21:01:17</td></tr><tr><td>1244314</td><td>如何实现全赢人生 - 奇迹30</td><td>2020-08-29 20:42:20</td></tr><tr><td>1244309</td><td>支付完成</td><td>2020-08-29 20:42:06</td></tr><tr><td>1244305</td><td>支付,订单</td><td>2020-08-29 20:41:55</td></tr><tr><td>1244304</td><td>支付订单</td><td>2020-08-29 20:41:55</td></tr><tr><td>1244299</td><td>如何实现全赢人生 - 奇迹30</td><td>2020-08-29 20:41:41</td></tr><tr><td>1244294</td><td>课程券中心</td><td>2020-08-29 20:41:25</td></tr><tr><td>1243967</td><td>首页</td><td>2020-08-29 20:32:13</td></tr><tr><td>1243960</td><td>奇迹30</td><td>2020-08-29 20:32:07</td></tr></tbody></table></td></tr></tbody></table></div>
<style>
table{
display: inline-table;
}
</style>export_html_table_csv.js 文件
if (typeof downloadCSV == "undefined") {
function downloadCSV(tableid, title) {
var winname;
try {
if (navigator.userAgent.indexOf("MSIE") > 0) { //IE浏览器
alert("该功能为兼容 IE浏览器, 请使用谷歌浏览器");
} else if (isFirefox = navigator.userAgent.indexOf("Firefox") > 0) { //Firefox
alert("该功能为兼容 Firefox, 请使用谷歌浏览器");
} else { //Google Chrome
//alert("Google Chrome等浏览器");
var str = getTableData(tableid, this);
//支持中文
var uri = 'data:text/csv;charset=utf-8,\ufeff' + encodeURIComponent(str);
var downloadLink = document.createElement("a");
downloadLink.href = uri;
downloadLink.download = title + ".csv";
document.body.appendChild(downloadLink);
downloadLink.click();
document.body.removeChild(downloadLink);
}
} catch (e) {
alert(e.Message);
return false;
}
return false;
}
}
if (typeof getTblData == "undefined") {
// 传入html中的table对象
function getTableData(curTbl, inWindow) {
var rows = 0;
var tblDocument = document;
tblDocument = eval(inWindow).document;
// var curTbl = tblDocument.getElementById(inTbl);
var outStr = "";
var rowStr = "";
if (curTbl != null) {
for (var j = 0; j < curTbl.rows.length; j++) {
for (var i = 0; i < curTbl.rows[j].cells.length; i++) {
if (i == 0 && rows > 0) {
outStr += ",";
rows -= 1;
}
rowStr = curTbl.rows[j].cells[i].innerText;
if (rowStr.indexOf('"') != -1) {
rowStr = rowStr.replace(/"/g, '""');
rowStr = '"' + rowStr + '"';
} else if (rowStr.indexOf(',') != -1) {
rowStr = '"' + rowStr + '"';
}
outStr += rowStr + ",";
if (curTbl.rows[j].cells[i].colSpan > 1) {
for (var k = 0; k < curTbl.rows[j].cells[i].colSpan - 1; k++) {
outStr += ",";
}
}
if (i == 0) {
if (rows == 0 && curTbl.rows[j].cells[i].rowSpan > 1) {
rows = curTbl.rows[j].cells[i].rowSpan - 1;
}
}
}
outStr += "\r\n";//换行
}
} else {
outStr = null;
alert(allPage.noData);
}
return outStr;
}
}#!/bin/bash
hyperf_code=message,shortname,tt_user,user,forum,im,community,,,tt_common,report,course
hyperf_code=(${hyperf_code//,/ })
for var in ${hyperf_code[@]}
do
echo $var
done
exit select id from aa where id not in (select union_key from bb)
如果id为bb中的union_key不存在的值, 那么就应该可以正常数据, 但是, 但是
如果union_key包含null, 则这个查询永远没有结果了阿里云的RDS需要修改为合适的且有所有数据库读写权限的账户,因为视图归属需要对应的视图写权限和查询的读取权限SELECT TABLE_SCHEMA AS '库',TABLE_NAME AS '视图名',DEFINER AS '所属账户',CONCAT("alter DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW ",TABLE_SCHEMA,".",TABLE_NAME," as ",VIEW_DEFINITION,";") AS '修复语句' FROM information_schema.VIEWS
WHERE TABLE_SCHEMA!='sys' AND TABLE_SCHEMA!='mysql' AND DEFINER!='root@%';