-
PHP图片代理缓存 永久缓存在服务器
用户访问地址,图片没有缓存的会自动缓存,缓存过的图片如果被缓存地址已经失效了,优先读取缓存。 保存为img.php文件。 如何使用: https://域名/img.php?url=地址 案例: https://api.photo8.site/imgdl/img.php?url=https://photo.tuchong.com/27367140/l/1142111964.webp 也可以直接插入图片。 可以用于一些采集场景,只需要替换图片地址即可。 请使用上方代码自行搭建,本站图片代理30天自动清除缓存。... -
Nginx反向代理原文件永久缓存的配置
location / { if (!-e $request_filename) { proxy_pass http://wx3.sinaimg.cn; } root /www/wwwroot/www.xxxxxx.com; proxy_store on; proxy_store_access user:rw group:rw all:r; proxy_temp_path cache_tmp; proxy_set_header x-real-ip $remote_addr; proxy_set_header x-forwarded-for $proxy_add_x_forwarded_for; } 宝塔面板默认反向代理是将缓存文件存储到了/www/server/nginx/proxy_cache_dir目录,而且缓存的文件并非是原文件,后期无法维护。 因此修改下反向代理配置文件就可以了。 这个反向代理需要开一段时间,因为反向代理缓存是需要访客访问到了图片后才会缓存下来。有可能你个别文章一直没有人访问,结果里面图片就没有缓存下来。可以自己使用工具访问一遍你的文章,让图片加载一次,加载一次即可完成缓存。... -
记一次 bing 壁纸导致的崩溃
/cgi-bin/luci/ 提示 403 报错,检查了一圈,路由器基础配置都没问题,最后发现问题出在花里胡哨的主题上,主题开启了首页bing壁纸。 解决方案: http://你的路由器地址/cgi-bin/luci/?luci_username=root&luci_password=你的路由器密码 进入路由器,把 bing 壁纸功能关闭即可。... -
EXCEL网址有效率检测 【手动检测】
不多说了,直接上代码,使用Python3。 有些时候收集的网址很多,等我们整理入库的时候可能已经失效了,在录入到网站里的时候我们会做一次有效检测,确保录入的时候是能访问的。 import openpyxl import requests from ping3 import ping # 打开Excel文件 wb = openpyxl.load_workbook('your_excel_file.xlsx') # 选择工作表 sheet = wb['sheet1'] # 指定列的网址数据范围 url_column = 'B' # 遍历每个单元格 for cell in sheet[url_column]: # 获取网址 url = cell.value # 检测网址有效性 try: response = requests.get(url) if response.status_code == 200: cell.offset(column=1).value = '有效' else: cell.offset(column=1).value = '无效' except: cell.offset(column=1).value = '无效' # 执行ping命令检测 ping_result = ping(url) if ping_result is not None: cell.offset(column=2).value = '有效' else: cell.offset(column=2).value = '无效' # 保存修改 wb.save('data.xlsx') # 在控制台显示运行状态 print(f"检测完成: {url}") # 关闭Excel文件 wb.close()... -
由于51la统计经常被挂马 我们更换了网址统计
开源的CMS程序,功能体验上和百度统计很相似,在数据上和百度统计没有太大的差别。 我们已开放访客权限,方便各位合作伙伴自行查看。 已关闭,我们已经使用了第三方数据统计。... -
网页 “悼念模式” 全站变灰/黑白色CSS代码
在国家公祭日、清明节、悼念先烈等等,可以让自己网站变成黑白色或者灰色,以表默哀或悼念。样式: html {-webkit-filter: grayscale(100%);}... -
使用CloudFlare Workers反代网站
使用 CloudFlare Workers 反代网站镜像整个网站 // 替换成你想镜像的站点 const upstream = 'www.google.com' // 如果那个站点有专门的移动适配站点,否则保持和上面一致 const upstream_mobile = 'www.google.com' // 你希望禁止哪些国家访问 const blocked_region = ['RU'] // 禁止自访问 const blocked_ip_address = ['0.0.0.0', '127.0.0.1'] // 替换成你想镜像的站点 const replace_dict = { '$upstream': '$custom_domain', '//www.google.com': '' } //以下内容都不用动 addEventListener('fetch', event => { event.respondWith(fetchAndApply(event.request)); }) async function fetchAndApply(request) { const region = request.headers.get('cf-ipcountry').toUpperCase(); const ip_address = request.headers.get('cf-connecting-ip'); const user_agent = request.headers.get('user-agent'); let response = null; let url = new URL(request.url); let url_host = url.host; if (url.protocol == 'http:') { url.protocol = 'https:' response = Response.redirect(url.href); return response; } if (await device_status(user_agent)) { upstream_domain = upstream } else { upstream_domain = upstream_mobile } url.host = upstream_domain; if (blocked_region.includes(region)) { response = new Response('Access denied: WorkersProxy is not available in your region yet.', { status: 403 }); } else if(blocked_ip_address.includes(ip_address)){ response = new Response('Access denied: Your IP address is blocked by WorkersProxy.', { status: 403 }); } else{ let method = request.method; let request_headers = request.headers; let new_request_headers = new Headers(request_headers); new_request_headers.set('Host', upstream_domain); new_request_headers.set('Referer', url.href); let original_response = await fetch(url.href, { method: method, headers: new_request_headers }) let original_response_clone = original_response.clone(); let original_text = null; let response_headers = original_response.headers; let new_response_headers = new Headers(response_headers); let status = original_response.status; new_response_headers.set('access-control-allow-origin', '*'); new_response_headers.set('access-control-allow-credentials',…... -
多个wordpress共享同一用户数据库
思路1. 两个 wordpress 站共享用户数据,其他(文章、主题、设置等)数据不共享。 2. 共享 cookie,即登录 A 站后切换为 B 站后仍为登录状态。 教程前提:A、B 两站为同顶级域名(a.abc.com 与 b.abc.com)或同根目录(abc.com/a 与 abc.com/b) A 为主站,B 共享 A 的用户数据,新建 B,安装时数据库选择和 A 同一数据库下,A 的数据库表头为 wp_,B 的改为和 A 的不一样,如:wp2_,安装 B 站时管理员任意填写,反正用不到(B 站的管理员账户从 A 站)。 打开 B 站的 wp-config.php 文件,添加: define('CUSTOM_USER_TABLE ',' wp_users'); define('CUSTOM_USER_META_TABLE ',' wp_usermeta '); 这时候,用 A 的用户数据去登录 B,可以登录但无后台权限。 然后在 A 的 functions.php 添加: add_action( 'user_register', 'dup_capabilities' ); add_action('profile_update', 'dup_capabilities'); Function dup_capabilities( $user_id ){ //在这里设置数据表前缀,所有站的数据库表前缀全部写上即可。 $prefixs = array('wp_','wp2_'); Global $table_prefix; $cap_val = get_user_meta( $user_id, $table_prefix.'capabilities',true); If( !Empty( $cap_val ) ) { Foreach( $prefixs as $prefix ){ if( $prefix != $table_prefix ) update_user_meta( $user_id, $prefix.'capabilities', $cap_val ); } } } 然后回头管理员身份登录 A 站,后台用户编辑功能里把每个用户重新编辑一下,不修改任何信息即可。编辑过后,就可以用 A 站的账户登录 B 站了。 所以如果要做类似数据共享的站,最好是在一开始主站用户数量很少的时候就开始操作,不然一个个用户编辑下去也很麻烦。 A 作为主站,操作用户数据或注册新用户就在 A 站上操作,然后同步给 B。 <span style="color: #ff0000;">(以下没测试,请自行测试:</span> <span style="color: #ff0000;">如果在B站上注册新用户是否能同步给A,可以在B的functions.php里也添加以上代码)</span> 这时候 A 站 B 站不同 cookie,无法免登录自由切换,接下来实现同步 cookie。 打开 A 站的 wp-config.php 文件,复制身份认证密钥,共 8 行。 把 B 站的身份认证密钥替换为 A 的,保证 A、B 一模一样。 在 A、B 两站的 wp-config.php 文件里同时添加: define('COOKIEPATH ','/'); define('COOKIE_DOMAIN', '这里填写A、B两站的顶级域名'); define('SECRET_SALT', '这里任意自定义一串字符串或密码'); define('ADMIN_COOKIE_PATH ','/'); define('SITECOOKIEPATH ','/'); define('COOKIEHASH', md5('这里任意自定义一串字符串或密码'));... -
WordPress文章发布后自动同步,无需插件API
WordPress 文章发布后自动同步文章到其他 wordpress 博客,无需插件 API前些日子在贴吧看到一位小伙伴需要这个功能,现在将我的实现方法分享给大家。WordPress 文章发布后同步文章到其他 wordpress 博客教程思路是:在另一个 WordPress 站点创建一个 API,文章发布时用 cURL 模拟 POST 请求 API 利用 wp_insert_post () 函数来创建文章。支持同步文章标题、内容、类型、分类、标签,分类需要另一个站点也有创建相同名称的分类,别名和 ID 不需要相同。实现:在博客站点的根目录创建一个文件,命名为 xxxxxxxx-post.php,代码如下:并设置用于启动 API 的 key <?php /* 文章发表后同步到另一个站点(接收) */ define('WP_USE_THEMES ', false); require_once("wp-load.php"); $key='xxxxxxxxxx'; //设置API的密钥,建议设置复杂 if($_POST['key']==$key){ $categorys=explode(',',$_POST['category']); $category=array(); for($x=1;$x<count($categorys);$x++) { $category[$x-1]=get_cat_ID($categorys[$x]); } $info = array( 'post_title' => $_POST['title'], 'post_content' => $_POST['content'], 'post_status' => 'publish', 'post_author' => 1, //发布文章的作者ID,1 为管理员 'post_date' => $_POST['date'], 'tags_input' => $_POST['tags'], 'post_category' => $category, 'post_type' => $_POST['type'] ); wp_insert_post( $info ); } ?> 在主博客主题的 functions.php 文件的最后一个?> 前加入已下代码,并设置 key,修改 API 地址: /* 文章发表后同步到另一个站点(发送) */ add_action('publish_post', 'E_sync_post'); //钩子,在文章发布时执行 Function E_sync_post($post_ID) { $key='xxxxxxxxxxxxx'; //输入你设置的密钥 $url='http://xxxxxx/xxxxxxxxxxxx-post.php';//API地址(接受同步文章博客地址,例:xx表示为发布文章主博客,那填写API地址就是负博客地址) $post_info = get_post($post_ID); If ( $post_info->post_status == 'publish' && $_POST['original_post_status'] != 'publish' ) { $title=$_POST['post_title']; $content=$_POST['content']; $date=$_POST['aa'].'-'.$_POST['mm'].'-'.$_POST['jj'].' '.$_POST['hh'].':'.$_POST['mn'].':'.$_POST['ss']; $category=''; for($x=1;$x<count($_POST['post_category']);$x++) { $category.=','.get_cat_name($_POST['post_category'][$x]); } $type=$_POST['post_type']; $tags=str_replace('、',',',$_POST['tax_input']['post_tag']); if($_POST['newtag']['post_tag']){ $tags.=','.str_replace('、',',',$_POST['newtag']['post_tag']); } $data = 'key='.$key.'&title='.$title.'&content='.$content.'&date='.$date.'&category='.$category.'&type='.$type.'&tags='.$tags; $ch = curl_init (); //cURL模拟POST curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, TRUE ); curl_setopt ( $ch, CURLOPT_POST, TRUE ); curl_setopt ( $ch, CURLOPT_POSTFIELDS, $data ); curl_setopt ( $ch, CURLOPT_URL, $url ); curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, FALSE); $ret = curl_exec ( $ch ); curl_close ( $ch ); Return $ret; } } 这样一来,在主站发表一篇文章后,镜像站点也就会发表出来一篇文章了,但也会有一些意外情况,比如不是马上发表出来,而是显示计划中,正常隔几分钟后会发表好,但也会有发表失败,需要在后台文章管理中,选择该发表失败文章,状态修改为已发布,更新即可。一些意外情况的解决: 问题 1,由于主题升级后,functions.php 代码会被置换。用以上方法实现的内容镜像每次在主题升级后都需要修改 functions.php 代码,这会造成麻烦。 所以有如下解决办法,代码如下: <?php //文章推送 add_action('publish_post', 'fanly_sync_post'); //钩子,在文章发布时执行 Function fanly_sync_post($post_ID) { $key='123456'; //输入你设置的密钥 $url='http://6.3838521.com/post.php';//API 地址,就是接受数据的那个站点 $post_info = get_post($post_ID); If (…... -
在一个网站上同时使用两个CDN服务,针对不同地域访问
对于同时提供中英文服务的网站来说,如何提高国内访问速度和国外访问速度显得非常重要。这这里以腾讯 CDN 和 cloudflare 来说明。腾讯的对象存储是面向非结构化数据,支持 HTTP/HTTPS 协议访问的分布式存储服务,它能容纳海量数据并保证用户对带宽和容量扩充无感知,可以作为我们网站的静态文件存储地。当我们在https://cloud.tencent.com/product/cos申请免费的 cos 空间后,同时就可以免费开通 cdn 服务,同时获赠免费的 50G cdn 流量,然后只需要添加备案后的网站就可以了。cloudflare 是世界上最大的免费 CDN 提供商,同时提供了免费的 https 服务,提供无限 DDOS 等各种防护等等好处,谁用谁知道。CF(cloudflare)对于国外的网站来说是非常完美的,但是国内的话免费方案速度不是很快,被很多人誉为减速 CDN,那么我们可不可以在国内使用免费的腾讯 CDN,同时对于国外用户使用 CF 的免费 CDN 服务呢?答案是肯定的。 目前同时使用国内 CDN 和 CF 有两种方案,这种方案的核心是使用阿里云的智能云解析,我这里是阿里云域名服务器 dns3.hichina.com,dns4.hichina.com,智能云解析允许针对不同的 ip 来源匹配不同的服务地址,可以指定不同 NS 服务器,不同 ip,不同 cname,真的是太棒了。所以要同时使用国内 CDN 和 CF CDN 的话需要使用阿里云注册域名(没有试过在国外注册转移到阿里云域名控制台)。 由于国内网站服务必须备案,因此网站域名必须备案,不然的话国内的 CDN 上面是无法添加的。下面正式介绍如何同时使用国内 CDN 和 CF cdn 来提高网站的访问速度,保护网站吧。 方案 1:国内 IP cname 解析到腾讯 CDN 上,国外 IP 使用 CF 的 ns 服务器第一步:ns 服务器更改为 CF 的 ns 服务器。 如上图,在阿里云控制台找到域名,选择要修改的域名,我这里是 bobobk.com,下拉列表中找到 DNS 修改,确认后会有手机验证,验证通过后就修改好了。然后在 cloudflare 上面添加自己要使用双 CDN 的网站,然后 cf 会确认 ns 设置是否正确,正确后就可以在 DNS 上面设置好解析了(如果原来有解析的话直接在 cf 上设置就好了,上面会显示历史解析地址),这里当然要记得确认 status 显示是橙色的,说明启用了 CDN,不然就直接暴露源站了,当然 CF 默认是使用的。 第二步:ns 服务器更改为阿里云的 ns 服务器(dns3.hichina.com,dns4.hichina.com)。修改方法同上。关键部分来了,在域名控制台点击 bobobk.com 右边的解析,进入到如下界面: 这里我们需要设置境外 ns 记录值为 CF 的服务器地址,cname 设置为腾讯云 cdn 的 cname 地址,这样国内 IP 访问就是通过腾讯 CDN,而国外 ip 访问就是 CF 的全球加速节点。 看下设置好国内国外 CDN 后的速度: 可以看到无论是国内还是国外速度都是非常的快,到此第一种方法介绍结束。 方案 2:国内 IP cname 解析到腾讯 CDN 上,国外 IP cname 解析到 cloudflare CDN 上第一步:成为 cloudflare parter 这种方法需要能够获得 cloudflare 的 cname 解析方式,对于个人来说就是需要申请个 cloudflare 的合作伙伴的方式才能够获得的。进入到 cf 合作伙伴申请页面 https://www.cloudflare.com/partners/ ,然后 google 一下或者百度一下就可以看到大量的相关教程了,这里就不详细介绍了。 第二步:根据 ip 设置不同的 cname 记录 在以 CF 合作者身份申请到 cname 之后,同样进入到智能云解析设置: 设置好国外的 cname 解析为 CF 的 cname,默认为腾讯的 CDN,到此大功告成了。 本教程在于如何同时使用国内 CDN 和国外 CLOUDFLARE cdn 来进行全球加速,目前本人使用的是第一种加速方式,目前也在申请 cloudflare 的合作者身份,后续如果有想要使用 CF cname 解析的我也可以给你们设置。教程来源:https://blog.csdn.net/ztb8541/article/details/84536062...





