发新帖

[4.0] Xiuno BBS 4.0 本地化图片的小程序

axiuno 11月前 5951

<?php
/*
	Xiuno BBS 4.0 本地化图片程序
	
	将文件存放于 tool/save_remote_image.php
	cd tool/
	php save_remote_image.php
	
	该脚本可以一直执行,可以放到后台运行:
	nohup php save_remote_image.php&
*/
// 配置不进行抓取的 URL
$localurlarr = array(
	'http://bbs.xiuno.com/',
	'http://plugin.xiuno.com/',
);
ob_implicit_flush(0);
set_time_limit(0);
define('SKIP_ROUTE', 1);
include '../index.php';
$lastpid = intval(kv_get('save_last_pid'));
xn_mkdir($conf['upload_path']."remote/");
//$types = array(1=>'gif', 2=>'jpg', 3=>'png', 4=>'swf', 5=>'psd', 6=>'bmp');
while(1) {
	
	// 创建目录
	$day = date('Ymd', time());
	$attach_dir = $conf['upload_path']."attach/$day/";
	$attach_url = $conf['upload_url']."attach/$day/";
	xn_mkdir($attach_dir);
	// 获取帖子
	$postlist = db_find('post', array('pid'=>array('>'=>$lastpid)), array('pid'=>1), 1, 10);
	foreach($postlist as $post) {
		$pid = $post['pid'];
		$tid = $post['tid'];
		$uid = $post['uid'];
		$s = $post['message_fmt'];
		preg_match_all('#<img[^>]+src="(http://.*?)"#i', $s, $m);
		if(!empty($m[1])) {
			$n = 0;
			foreach($m[1] as $url) {
				foreach($localurlarr as $localurl) {
					if($localurl == substr($url, 0, strlen($localurl))) continue 2;
				}
				$ext = file_ext($url);
				if(!in_array($ext, array('gif', 'jpg', 'png', 'bmp'))) continue;
				$filename = xn_rand(16).'.'.$ext;
				$destpath = $attach_dir.$filename;
				$desturl = $attach_url.$filename;
				$s2 = str_replace($url, $desturl, $s);
				if($s != $s2) {
					$imgdata = file_get_contents($url);
					$filesize = strlen($imgdata);
					if($filesize < 10) continue;
					file_put_contents_try($destpath, $imgdata);
					list($width, $height) = getimagesize($destpath);
					$attach = array(
						'tid'=>$tid,
						'pid'=>$pid,
						'uid'=>$uid,
						'filesize'=>$filesize,
						'width'=>$width,
						'height'=>$height,
						'filename'=>"$day/$filename",
						'orgfilename'=>$filename,
						'filetype'=>'image',
						'create_date'=>$time,
						'comment'=>'',
						'downloads'=>0,
						'isimage'=>1
					);
					$s = $s2;
					$aid = attach_create($attach);
					$n++;
				}
			}
			post__update($pid, array('message_fmt'=>$s, 'images'=>($post['images'] > 0 ? $post['images'] : $n)));
		}
		$lastpid = $pid;
		kv_set('save_last_pid', $lastpid);
		echo '.';
		flush();
	}
	if(IN_CMD) {
		function_exists('sleep') AND sleep(1);
	} else {
		if(empty($postlist)) {
			echo '<h1>本地化完毕</h1>';
		}
		echo '<script>window.location.reload();</script>';
		flush();
	}
}
?>


最新回复 (22)
小野猫_1472897325 11月前
1
支持老大  嘿嘿  老大真是好人啊
aciaos 11月前
2
放在  tool  這個目錄就ok了嗎
哈  我竟然看不太懂了 
tool/save_remote_image.php

竟然我放上去  沒反應  >_<
macbbs 11月前
3
不能收藏啊!我想收藏这个
shvv 10月前
4
tanzeyun 10月前
5
做好直接让我们下载装多好,没看懂
小胡老师 10月前
6
不错~
zc0727 9月前
7
叫我这个小白  情何以堪啊...看不懂#24
ggmm 9月前
8
学习
Winson 8月前
9
留言标记
niuzheng12 8月前
10


朱哥_1473071489 8月前
11
直接放在tool没反应???请教。。。
itopidea 8月前
12
mark
git311 7月前
13
为什么不做成插件的形式呢。那样更方便些吧
ehgo 5月前
14
好东东
khorchin 4月前
15
这个东西在PHP7下怎么用啊?我无论如何都启动不了PDO
老雷 4月前
16
手机发图怎么解决
伏笔主机 4月前
17
谢谢分享
POP丶臧 2月前
18
老大,出个怎么用的教程吧
POP丶臧 2月前
19
可以使用,不过帖子太多一直超时,能不能分批处理呢
银角大王 2月前
20
Xiuno  BBS  4.0  本地化图片的小程序,marker备用
shvv 1月前
21
xwm 8小时前
22
这个是在php多少的环境下运行的。我用的php5.6第一次运行下面几个点,不会停止。然后强行结束了以后第二次运行就一个点都不显示
返回