王新阳

wangxinyang

php采集、DOM操作

phpQuery
https://blog.csdn.net/summerxiachen/article/details/78681674
https://www.php.cn/faq/568108.html
http://code.google.com/p/phpquery/
http://phpquery-library.blogspot.com/

require_once './phpQuery.php';
phpQuery::newDocumentFile($url);
$title=pq('h1#activity-name')->text();
$author=pq("meta[name='author']")->attr('content');
$summary=pq("meta[name='description']")->attr('content');
$content=pq('div#js_content')->html();

QueryList 基于 phpQuery 实现
https://querylist.cc/
https://github.com/jae-jae/querylist

composer
https://www.phpcomposer.com/

composer中文文档
https://docs.phpcomposer.com/

Linux下面如何查看CPU,磁盘,内存,网络等资源使用情况

参考:https://blog.csdn.net/qq_21891743/article/details/131390588

top 命令是Linux系统下一个常用的命令行工具,用于实时监视系统中运行的进程和资源的使用情况。可以通过top命令查看CPU、内存、进程等系统资源的占用情况。

free -h 命令用于显示系统的物理内存和交换空间使用情况,可以方便地查看系统中的内存和交换分区的使用情况。

df -h 命令用于显示分区和文件系统的信息。

php允许跨域设置

转自:https://www.yisu.com/zixun/604851.html

php设置允许跨域访问可以有三种方式,具体方法如下所示:

方式一:
header("Access-Control-Allow-Origin: *");//允许所有地址跨域请求

方式二:
header("Access-Control-Allow-Origin: http://localhost:8080");//指定某个地址可以跨域请求,这里只能指定一个

方式三:如果要允许多个地址跨域请求可以这样写

$origin = ['http://localhost:8080','http://localhost:8081'];
$AllowOrigin = 'http://localhost:8080';
if(in_array($_SERVER["HTTP_ORIGIN"],$origin)) {
    $AllowOrigin = $_SERVER["HTTP_ORIGIN"];
}
header("Access-Control-Allow-Origin: ".$AllowOrigin );

设置允许的请求方法,可以用*表示所有,header("Access-Control-Allow-Methods: POST");

如果允许请求携带cookie,此时 origin配置不能用 *,此时前端似乎也要做配置,让请求中携带cookieheader('Access-Control-Allow-Credentials:true');

设置允许跨域的请求头,通常会在请求头里面加登录验证信息,那么服务端需要指定允许那些请求头,这里不能用*,多个字段用逗号隔开。header('Access-Control-Allow-Headers:token');

nginx伪静态配置

if ($uri !~ "^/manage\.php"){
  set $rule_0 1$rule_0;
}
if (!-f $request_filename){
  set $rule_0 2$rule_0;
}
if (!-d $request_filename){
  set $rule_0 3$rule_0;
}
if ($rule_0 = "321"){
  rewrite ^/(.*)$ /index.php/$1 last;
}


我的web.config

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <system.webServer>
        <rewrite>
            <rules>
                <rule name="蜘蛛反弹" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAny">
                        <add input="{HTTP_USER_AGENT}" pattern="PetalBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="Bytespider" />
                        <add input="{HTTP_USER_AGENT}" pattern="YisouSpider" />
                        <add input="{HTTP_USER_AGENT}" pattern="Yahoo\!\ Slurp" />
                        <add input="{HTTP_USER_AGENT}" pattern="EtaoSpider" />
                        <add input="{HTTP_USER_AGENT}" pattern="Applebot" />
                        <add input="{HTTP_USER_AGENT}" pattern="EasouSpider" />
                        <add input="{HTTP_USER_AGENT}" pattern="ia_archiver" />
                        <add input="{HTTP_USER_AGENT}" pattern="DoCoMo\ Spider" />
                        <add input="{HTTP_USER_AGENT}" pattern="DotBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="AhrefsBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="BDCbot" />
                        <add input="{HTTP_USER_AGENT}" pattern="DeuSu" />
                        <add input="{HTTP_USER_AGENT}" pattern="MJ12bot" />
                        <add input="{HTTP_USER_AGENT}" pattern="SEOkicks" />
                        <add input="{HTTP_USER_AGENT}" pattern="YandexBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="DomainCrawler" />
                        <add input="{HTTP_USER_AGENT}" pattern="Qwantify" />
                        <add input="{HTTP_USER_AGENT}" pattern="seznambot" />
                        <add input="{HTTP_USER_AGENT}" pattern="BUbiNG" />
                        <add input="{HTTP_USER_AGENT}" pattern="aiHitBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="SiteExplorer" />
                        <add input="{HTTP_USER_AGENT}" pattern="ExtLinksBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="spbot" />
                        <add input="{HTTP_USER_AGENT}" pattern="netEstate\ NE\ Crawler" />
                        <add input="{HTTP_USER_AGENT}" pattern="AlphaBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="MegaIndex\.ru" />
                        <add input="{HTTP_USER_AGENT}" pattern="MauiBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="Daum" />
                        <add input="{HTTP_USER_AGENT}" pattern="YaK\/1\.0" />
                        <add input="{HTTP_USER_AGENT}" pattern="BLEXBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="SemrushBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="serpstatbot" />
                        <add input="{HTTP_USER_AGENT}" pattern="Nimbostratus-Bot" />
                        <add input="{HTTP_USER_AGENT}" pattern="Adsbot" />
                        <add input="{HTTP_USER_AGENT}" pattern="vxiaotou-spider" />
                        <add input="{HTTP_USER_AGENT}" pattern="CensysInspect" />
                        <add input="{HTTP_USER_AGENT}" pattern="Barkrowler" />
                        <add input="{HTTP_USER_AGENT}" pattern="DataForSeoBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="SeekportBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="coccocbot" />
                        <add input="{HTTP_USER_AGENT}" pattern="Neevabot" />
                        <add input="{HTTP_USER_AGENT}" pattern="t3versionsBot" />
                        <add input="{HTTP_USER_AGENT}" pattern="YaoSouBot" />
                    </conditions>
                    <action type="Redirect" url="http://{REMOTE_ADDR}/{R:1}" redirectType="Found" />
                </rule>
                <rule name="已导入的规则 2" stopProcessing="true">
                    <match url="^(.*)$" ignoreCase="false" />
                    <conditions logicalGrouping="MatchAll">
                        <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" />
                        <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" />
                        <add input="{R:1}" pattern="\.(hqx|cpt|csv|bin|dms|lha|lzh|exe|class|psd|so|sea|dll|oda|pdf|ai|eps|ps|smi|smil|mif|xls|ppt|pptx|wbxml|wmlc|dcr|dir|dxr|dvi|gtar|gz|gzip|php4|php3|phtml|phps|js|swf|sit|tar|tgz|z|xhtml|xht|zip|rar|mid|midi|mpga|mp2|mp3|aif|aiff|aifc|ram|rm|rpm|ra|rv|wav|bmp|gif|jpeg|jpg|jpe|jp2|j2k|jpf|jpg2|jpx|jpm|mj2|mjp2|png|tiff|tif|heic|heif|css|htm|shtml|txt|text|log|rtx|rtf|xml|xsl|mpeg|mpg|mpe|qt|mov|avi|movie|doc|docx|dot|dotx|xlsx|word|xl|eml|json|pem|p10|p12|p7a|p7c|p7m|p7r|p7s|crt|crl|der|kdb|pgp|gpg|sst|csr|rsa|cer|3g2|3gp|mp4|m4a|f4v|flv|webm|aac|m4u|m3u|xspf|vlc|wmv|au|ac3|flac|ogg|kmz|kml|ics|ical|zsh|7z|7zip|cdr|wma|jar|svg|vcf|srt|vtt|ico|odc|otc|odf|otf|odg|otg|odi|oti|odp|otp|ods|ots|odt|odm|ott|oth)$" negate="true" />
                    </conditions>
                    <action type="Rewrite" url="index.php/{R:1}" />
                </rule>
            </rules>
			<outboundRules>
				<rule name="AddCrossDomain">
					<match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" />
					<conditions logicalGrouping="MatchAll" trackAllCaptures="true">
						<add input="{HTTP_ORIGIN}" pattern="(https?://((www\.)?abc\.com|(www\.)?abc\.cn))" />
					</conditions>
					<action type="Rewrite" value="{C:0}" />
				</rule>
			</outboundRules>
        </rewrite>
    </system.webServer>
</configuration>

最后部分是允许跨站设置

Linux目录详解

转自:https://w3h5.com/post/336.html

我们应该知道 Windows 有一个默认的安装目录专门用来安装软件。Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的。

/usr 系统级的目录,可以理解为 C:/Windows/

/usr/lib 可理解为 C:/Windows/System32

/usr/local 用户级的程序目录,可以理解为 C:/Progrem Files/ 。用户自己编译的软件默认会安装到这个目录下。

/opt 用户级的程序目录,可以理解为 D:/Software , opt 有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接 rm -rf 掉即可。

在硬盘容量不够时,也可将 /opt 单独挂载到其他磁盘上使用。

源码放哪里?

/usr/src 系统级的源码目录。

/usr/local/src 用户级的源码目录。

拓展:

/opt

Here's where optional stuff is put. Trying out the latest Firefox beta? Install it to /opt where you can delete it without affecting other settings. Programs in here usually live inside a single folder whick contains all of their data, libraries, etc.

这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。

举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。

/usr/local

This is where most manually installed(ie. outside of your package manager) software goes. It has the same structure as /usr. It is a good idea to leave /usr to your package manager and put any custom scripts and things into /usr/local, since nothing important normally lives in /usr/local.

这里主要存放那些手动安装的软件,即不是通过"新立得"或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。

常用目录及用途

/bin 存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。

/etc 存放系统管理和配置文件

/home 存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示

/usr 用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。

/usr/x11r6 存放x window的目录

/usr/bin 众多的应用程序  

/usr/sbin 超级用户的一些管理程序  

/usr/doc linux文档  

/usr/include linux下开发和编译应用程序所需要的头文件  

/usr/lib 常用的动态链接库和软件包的配置文件  

/usr/man 帮助文档  

/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里  

/usr/local/bin 本地增加的命令  

/usr/local/lib 本地增加的库

/opt 额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。

/proc 虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。

/root 超级用户(系统管理员)的主目录(特权阶级^o^)

/sbin 存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。

/dev 用于存放设备文件。

/mnt 系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。

/boot 存放用于系统引导时使用的各种文件

/lib 存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。

/tmp 用于存放各种临时文件,是公用的临时文件存储点。

/var 用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。

/lost+found 每个分区默认都有一个 lost+found 目录,用来存放 fsck 过程中部分修复的文件的。

lodop打印控件-关于谷歌Chrome浏览器94版跨域问题的解决方案

谷歌浏览器再次迈出激进安全步骤,Win10+Chrome94版阻断http页面访问localhost服务, 这一举动广泛影响了Web模式的设备管理系统,例如路由服务、打印服务等,其中也包括C-Lodop软件。 安全是个美好的托词,真正让谷歌贸然行动的动机是大力推广https协议,而https背后是TLS证书, TLS证书背后是浏览器厂商的年费分成,利益巨大...闲话少说,解决方案如下:

有四种方法,选其一就行:

一、网站改用HTTPS方式(彻底方案)

二、安装最新的C-Lodop6.564及后版本,并更新LodopFuncs.js文件;

三、手动修改客户浏览器安全设置,在Chrome地址栏输入:chrome://flags/#block-insecure-private-network-requests

看到底色泛黄的“Block insecure...”项的 Default 值,改选成 Disabled然后窗口下方会出现蓝底的Relaunch按钮,点它重启浏览器。

四、客户端改用低版本Chrome(94版前)浏览器,简单办法是安装360急速版(Chrome内核)

注:微软的浏览器Edge94版因为采用了Chrome内核,故以上解决方案也适用。

系统存在支持SSL中等强度密码套件(SWEET32)

转自:https://blog.csdn.net/qq_38254635/article/details/128400965

gpedit.msc 》 计算机配置 》管理模板》网络》SSL配置设置》SSL密码套件顺序》启用

TLS_AES_256_GCM_SHA384、TLS_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_NULL_SHA256、TLS_RSA_WITH_NULL_SHA、TLS_PSK_WITH_AES_256_GCM_SHA384、TLS_PSK_WITH_AES_128_GCM_SHA256、TLS_PSK_WITH_AES_256_CBC_SHA384、TLS_PSK_WITH_AES_128_CBC_SHA256、TLS_PSK_WITH_NULL_SHA384、TLS_PSK_WITH_NULL_SHA256

改为:

TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA

重启系统,即可。

检查方法:

下载安全 nmap-7.93-setup.exe。
安装好之后,Win + R 输入 cmd,假设要检测的域名是 xxx.com
输入:nmap -sV --script ssl-enum-ciphers -p 443 xxx.com

没问题时如下图:

下图是有问题的情况:


MySQL数据库开启审计功能

来源:https://www.shuzhiduo.com/A/kvJ3wgegJg/

数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分。

1、查看General Log开启情况:执行SQL命令show variables like '%general_log%' ;可以看到默认general_log是OFF的

2、开启General Log: 执行SQL命令set global general_log=on 而后查看general_log打开了

3、验证:general_log打开后,所有SQL的访问都会记录在general_log_file指向的日志文件。

开启General Log只要用户执行了操作,无论对错,MySQL就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响。所以我们一般不建议开启开功能,个别情况下可能会临时的开一段时间以供排查故障等使用。对于生产环境中任务繁重的MySOL数据库,启用审计会引起服务器的高昂成本,因此建议采用第三方数据库审计产品收集审计记录。


layui自动触发select事件

来源:https://toscode.gitee.com/layui/layui/issues/I5JMRW

$(obj).siblings("div.layui-form-select").find("dl dd[lay-value='"+value+"']").click();

2024-05-02 星期四 农历三月二十四