发布于PHP分类中的文章

Oct 06

这里试过反代 ifile share,cloudreve,metube 等都出现这个问题,主页面可以显示,表示反代是没有问题的,但是所有 css,js 文件都是 404,界面显示不完全,很奇怪,你说都是静态文件,但 favicon.ico 那些没问题。

原本反代代码,css/js 404 出错:

        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:808;
            add_header X-Cache $upstream_cache_status;
            add_header Cache-Control no-cache;
        }

添加以下代码,则正常:

        location ~* \.(gif|png|jpg|css|js|woff|woff2)$ {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP       $remote_addr;
            proxy_set_header X-Forwarded-For  $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_redirect off;
            proxy_pass http://127.0.0.1:808;
            expires 12h;
        }

这里有个问题,如果反代不是在 / 下,而是子目录下,比如 /metube,按照上面的写法就会影响到 / 下主站,导致主站找不到一些资源文件,我这里就出现修改后主站找不到 favicon.png 的问题,所以我就只添加 css|js 添加子目录匹配:

        location /metube/ {
            proxy_pass http://127.0.0.1:8081;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

        location ~ ^/metube/.*\.(css|js)$ {
            proxy_pass http://127.0.0.1:8081;
            proxy_redirect off;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade";
            proxy_set_header Host $host;
        }

主站 PHP 脚本都是远程调用 CDN 的 css|js,没有本地的,所以没出问题。至少这样暂时能用。 :neutral: :neutral: :neutral:

没找到问题的根本! :twisted:


Mar 20


Dec 04

LiteServe 是一款强大的综合服务器,小小一个软件同时支持充当 Web,FTP,Mail,Telnet 服务器,而且通过 ISAPI 扩展,它的 Web 服务器还可以支持 PHP,MySQL,Perl 等主流的动态编程语言,配搭上内置的动态的域名更新支持,专业的 FTP 支持以及电子邮件,终端操作,LiteServe 简直就是一个虚拟服务器提供商嘛~

Serva 看起来更加强大,1M 左右(32 位的只有 700 多 K)的大小,居然同时支持充当 HTTP,FTP,TFTP,DHCP, proxyDHCP, DNS, SNTP, SYSLOG 服务器!还可以作为 TFTP 客户端使用~!

Serva 是用 C/C++ 编写的多线程程序,可以很好的工作在 Windows 2000 - Windows 7 下,不需要管理员权限,不需要安装,不写注册表。



Oct 23

这个脚本功能很简单,如果你有境外 PHP 主机空间,利用这个脚本可以查询到被 DNS 污染的一些站点的真实 IP 。缓存的结果可以直接拷贝到系统 Hosts 文件中使用,也可以转换为 Unbound 的 localzone 格式供 Unbound 调用。hosts.txt 中包含需要查询的站点主机名,一行一个,ipcache.txt 则为查询结果缓存文件,标准的 Windows 系统 Hosts 文件格式。

可以到本站: gethosts 页面体验效果。


<?php
/**
 * gethosts
 *
 * @link       https://www.quakemachinex.com/gethosts/
 * @copyright  Copyright (c) 2011 AvP
 * @license    MIT Style License
 * @version    1.0
 */

$hostsLock = true; //用户提交的查询数据是否写入 hosts.txt,默认:不写入

$isPost = false;

if (isset($_POST['hosts'])){
    $hosts_txt = $_POST['hosts'];
    $isPost = true;
	if (!$hostsLock) file_put_contents('hosts.txt',$hosts_txt);
} else {
	$hosts_txt = file_get_contents('hosts.txt');
}
$hosts_array = preg_split('/[\s,]+/', $hosts_txt, -1, PREG_SPLIT_NO_EMPTY);
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>gethosts</title>
<script src="ZeroClipboard.js" type="text/javascript"></script>
<script type="text/javascript">
//类似 PHP 中的 trim
    function trim(str) {
        var str = str.replace(/^\s\s*/, ''),
            ws = /\s/,
            i = str.length;
        while (ws.test(str.charAt(--i)));
        return str.slice(0, i + 1);
    }
//基于 ZeroClipboard 的跨浏览器复制到剪贴板
    function ctoc() {
        var txt = document.getElementById('hostsMap').value;

        if (window.clipboardData) {
            window.clipboardData.setData("text", txt);
            alert("Copied text to clipboard:\n" + txt);
        } else {
            var clip = new ZeroClipboard.Client();
            clip.glue('clickme');
            clip.setText(txt);
            clip.addEventListener('complete', function(client, text) {
                alert("Copied text to clipboard:\n" + text);
            });
            }
    }
//转换 Hosts 文件格式到 Unbound 的 localzone 格式
    function htol() {
        var i;
        var localz = new Array();
        var hosts = document.getElementById('hostsMap').value;
        var localzs='';
        hostdomain = hosts.split("\n");
        for (i=0;i<hostdomain.length;i++) {
            if (trim(hostdomain[i]) != '') {
                localz[i] = hostdomain[i].split("\t");
                localzs += 'local-data: "'+localz[i][1]+' A '+localz[i][0]+'"\n';
            }
        }
        document.getElementById('hostsMap').value = localzs;
    }
</script>
</head>
<body>
<?php
//判定字符串是否是 IP 地址
function IsIPAdress($value){

    if (preg_match('/^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$/', $value)){
        return true;
    }
    return false;
}
//获取真实 IP,并且缓存,用户提交数据不缓存
function getRealIP(){
    global $hosts_array, $isPost;
    if($isPost) {
        foreach($hosts_array as $hostname){
            $ip = gethostbyname($hostname);
            if (IsIPAdress($ip)) {
                $i = $i + 1;
                echo "$ip\t$hostname";
                echo "\n";
                if ($i > 25) return;
            }
        }
    } else {
        $cache_days = 1; //缓存多少天
        $fz = filesize('ipcache.txt');
        $ipcache_create_time = filectime('ipcache.txt');
        $time_now = date("Y-m-d H:i:s");
        $ipcache_stay_days = (strtotime($time_now)-strtotime(date("Y-m-d H:i:s",$ipcache_create_time)))/86400;
        $ipcache_stay_days = floor($ipcache_stay_days);

        if ($fz && $fz != 0 && $ipcache_stay_days < $cache_days) {
            $ipcache = file_get_contents('ipcache.txt');
            echo $ipcache;
         } else {
            foreach($hosts_array as $hostname){
                $ip = gethostbyname($hostname);
                if (IsIPAdress($ip)) {
                    $ipcacheall .= "$ip\t$hostname\n";
                }
            }
            $local_ipcache = 'ipcache.txt';
            $local_ipcache_actual = fopen($local_ipcache, 'w+');
            fwrite($local_ipcache_actual, $ipcacheall);
            fclose($local_ipcache_actual);
            $ipcache = file_get_contents('ipcache.txt');
            echo $ipcache;
         }
     }
}
?>
    <div style="width:1024px; margin:0 auto;">
        <div style="float:left;margin:0 10px;">
            <h2>Blocked Hostnames</h2>
            <form method="post">
                <button type="submit" style="margin: 5px auto; display: block;">Get Hosts</button>
                <textarea name="hosts" style="width:400px;height:550px;margin:0;padding:3px;display:block;"><?php echo $hosts_txt;?></textarea>
            </form>
        </div>
        <div style="float:left;margin:0 10px;">
            <h2>hosts</h2>
            <div style="margin: 5px auto; display: block;">
            <button type="button" id="clickme" onclick="ctoc();">CopyToClipboard(Click Twice!)</button>
            <button type="button" id="hosttolocal" onclick="htol();">ConventerToLocalzone</button>
            </div>
            <textarea id="hostsMap" onclick="this.focus();this.select()"style="width:500px;height:550px;margin:0;padding:3px;display:block;"><?php getRealIP(); ?></textarea>
        </div>
    </div>
</body>
</html>

ZeroClipboard 可到官方下载。 :!:


Sep 25

Google 提供了一个获取站点 favicon 的服务:

http://www.google.com/s2/favicons?domain=

但是天朝,Google 不稳定,所以需要把这些站点图标缓存到本地,以下:


//从URL中提取域名函数
function get_domain($url) {
/*
Author : Ayush
URL : http://Webgarb.com
*/
    $url = explode('/', str_replace('www.', '', str_replace('http://', '', $url)));
    return $url[0];
}

function getFavicon($var){
    $cache_days = 30; //图标缓存多少天
    $linkdomain = get_domain($var);
    $favicon_cache_dir = ABSPATH.'wp-content'.DIRECTORY_SEPARATOR.'plugins'.DIRECTORY_SEPARATOR.'favicon_cache';
    $favicon_url = 'https://www.quakemachinex.com/blog/wp-content/plugins/favicon_cache/'.$linkdomain.'.png';
    $fp = fopen ($favicon_cache_dir.'/'.$linkdomain.'.png', 'r');
    $favicon_create_time = filectime($favicon_cache_dir.'/'.$linkdomain.'.png');
    $time_now = date("Y-m-d H:i:s");
    $favicon_stay_days = (strtotime($time_now)-strtotime(date("Y-m-d H:i:s",$favicon_create_time)))/86400;
    $favicon_stay_days = floor($favicon_stay_days);

    if ($fp && $favicon_stay_days < $cache_days) {
        return $favicon_url;
     } else {
        $remote_favicon = file_get_contents('http://www.google.com/s2/favicons?domain='.$linkdomain);
        $local_favicon = $favicon_cache_dir.'/'.$linkdomain.'.png';
        $local_favicon_actual = fopen($local_favicon, 'w+');
	fwrite($local_favicon_actual, $remote_favicon);
	fclose($local_favicon_actual);
        return $favicon_url;
     }

}

把这个函数引用到友情链接或者 BlogRoll 都行,可以参见本站效果。


Sep 28

哥,帮我做个相册好不?靠,你很闲啊,自己去弄!

ImageVue 是一款做的非常漂亮的基于 Flash+PHP+Javascript 的网络相册,在 2008 年 9 月发布了它的最新版本 03.09.08 Beta 。

ImageVue V2 功能

  • 1.加入了 HTML 相册模式及 Rewrite 地址静态化支持,使原来 Flash 不利于搜索引擎收录的缺点得到很好的改善
  • 2.放弃了 V1 中的相框设计,采用了更加美观的开放界面,使宽屏和大显示器用户拥有更好的浏览效果
  • 3.后台管理模块更加强大,包括管理用户、修改配置文件、更改语言包、更换主题和管理所有图片文件夹等
  • 4.基于 V1 的功能,包括自动探测文件夹、自动生成缩略图、支持 MP3 背景音乐等
  • 目前已经非常完美的支持中文,包括中文目录,文件名,文件描述等等,而你只需要稍微修改一下模板的 CSS 文件中的字体定义而已

ImageVue V2 新功能和特色

  • 1.后台管理员增加目录管理,可设置特定用户管理某一特定图片文件夹,实现了相册的多人管理和分级管理
  • 2.增加了Cache缓存模块,极大的节省了图片打开时间
  • 3.管理员可以在前台页面直接修改图片,使管理直观化

ImageVue V2 官方演示

ImageVue V2 环境需求

ImageVue 运行在 PHP 环境下,并且最好带 GD2 库(为了自动生成缩略图,如果没有 GD2,你也可以手工生成缩略图然后上传)。V2 在后台提供了空间测试功能,用来测试你的空间是否(完全)支持 ImageVue。V2 程序采用了智能模块化设计,所以某些空间上的缺陷并不会影响到整个程序,好比我测试的时候用的 PHPStudy 包默认没有开 EXIF 支持,它只是提醒而已,这并不会影响整体功能。

(要打开 EXIF 功能,你需要编辑 php.ini 文件,取消 php_exif.dll 以及 php_mbstring.dll 前面的注释,而且注意,php_mbstring.dll 必须在 php_exif.dll 之前加载!而 php.ini 中默认 php_exif.dll 是在 php_mbstring.dll 之后的,一定记得调整。)

ImageVueV2

ImageVue V2 简单设置

解压上传后,假设你的相册地址是:

https://www.quakemachinex.com/imagevue/

那么你的后台管理地址是:

https://www.quakemachinex.com/imagevue/imagevue

嗯,不要搞错了,默认用户名和密码都是 admin,进入后它会提示你及时更改这个超级用户密码,安全第一,改了吧。

点 Config,再点右边的 Create New Language ,新建一个语言包,输入 Chines,你就可以自己定制语言包了,要翻译的东西非常简单我就不详细说了。然后你需要在 themes - 你选择的模板 - edit - settings - language 里面填入 Chinese 就让主界面变成中文了。

它默认模板的字体对中文支持都不好,所以你可以在:

“themes - 你选择的模板 - edit - 右边的 Create new theme, based on default theme - Edit theme stylesheet”

里面修改类似:

“font-family: Candara, Arial, "Times New Roman", Times, serif;

的字段为:

" font-family: Tahoma, Arial, "Times New Roman", Times, serif;”

当然你也可以用文本编辑器打开:

https://www.quakemachinex.com/imagevue/imagevue/themes/你选择的模板目录名字

下面的 imagevue.css 文件,查找替换一次性搞定。 :mrgreen:

好了,其他的自己研究吧。 :evil:


Dec 26

Mr. DeZend 是一个完整的本地 DeZend 系统,可以还原/整理大多数经过 Zend 的 PHP 源代码。

指南:
1、操作系统:Windows 2000/XP,内存越大越好,推荐 1G 以上。

2、安装 PHP5 ,假定安装在 c:\php5 ,复制 c:\php5 下所有文件到 c:\php-de 文件夹。

3、安装 ZendOptimizer-3.3.0 ,假定安装在 C:\Program Files\Zend\ZendOptimizer-3.3.0 。

4、解压 dezend.rar 包到 c:\php-de 文件夹,覆盖里面的 php.exe 和 php5ts.dll 文件,还有两个文件 config.ini(混淆函数列表)、PhpVars.reg(环境变量配置)和 decode_all.bat(批量 dezend )下面要用到。

5、修改 c:\php-de 文件夹下的 php.ini 文件,增加下面一个节:

[Zend]
zend_extension_manager.optimizer_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\Optimizer-3.3.0"
zend_extension_ts="C:\Program Files\Zend\ZendOptimizer-3.3.0\lib\ZendExtensionManager.dll"

修改内存限制
memory_limit = 128M

6、修改 PhpVars.reg 文件,将对应的行修改为:
"PHP_DECODE_INI"="c:\\php-de"
"PHP_DECODE_PATH"="c:\\php-de\\decode"
然后双击该文件,导入注册表。

7、复制要 dezend 的文件夹到 c:\php-de 目录下,假定是 c:\php-de\dezend 。运行 cmd ,执行:
cd c:\php-de
decode_all zend

8、耐心的等一段时间,dezend 好的文件就在 c:\php-de\decode 文件夹了。

提示:
可以修改decode_all里面的*.php *.inc,添加其他扩展名的php文件。

嗯,可以用来破解某些 PHP 源码。


Oct 12

以前都用LastRSS来实现本站的PlayWithTag以及Tag HotList的功能,大体还可以,不过有些关键字在某些站点不能获取正确的结果,今天试了试Google AJAX Feed API,哎,不得不佩服Google的技术,无论适用性和速度都比以前用LastRSS要好多了。

可以在本站首页顶和文章页面下面体验这些效果,关注最新的Tag相关文章。


Oct 06

Script Converter是个很简单的工具,就是把HTML代码转成PHP, ASP, JSP, Perl, Python, VBScript输出的代码,很方便,不用小心翼翼那些引号了...

Script Converter 1.0是免费软件,下载中包含了安装版和HTML离线版。


Sep 22

如果以前我知道这个脚本,可能我以前的数据就不会丢得那么冤枉了。由于以前用数据库保存了一些数据文件,所以数据库非常大(50+M),本地导入都长期超时。而BigDump就是用来解决这个问题的。

使用:

  1. 下载解压出bigdump.php,用你的编辑器编辑数据库连接参数,就是用户名,密码,表那些;
  2. 删除目标数据库的旧表,或者在用phpMyAdmin导出数据时选‘Add DROP TABLE’, ‘Add IF NOT EXISTS’,这样在导入数据时就会覆盖目标表;
  3. 在服务器上建立一个工作目录,例如:dump;
  4. 如果你想通过服务器的HTTP方式上传数据库,请把dump目录的权限设为777(基于Linux的服务器 chmod 777),不过这样通常会受到PHP配置上传文件大小的限制,最好还是用FTP上传;
  5. 上传bigdump.php和你的数据库文件(*.sql或者*.gz)到dump目录,记得如果是.gz后缀的数据库要用BINARY模式上传;
  6. 在浏览器运行bigdump.php脚本,例如:http://www.yourdomain.com/dump/bigdump.php,这时会有列表让你选择dump目录下的数据库文件;
  7. BigDump会自动更新显示导入的过程,只要你没关闭浏览器的Javascript支持,给点耐心等待导入的完成,不要关闭当前窗口!
  8. 导入成功后,记得删除bigdump.php文件和你的数据库!

中文用户可能需要调整 bigdump.php 文件中的 $db_connection_char_set 参数符合自己的数据库,不至于导入后乱码。

BigDump的作者是Alexey Ozerov,您可以去官方下载这个PHP脚本的最新版本,也可以在本地下载0.28版。