Posts Tagged ‘PHP’

Apache中配置多个虚拟目录

星期日, 十月 22nd, 2017

我在Windows 7下配置Apache2.4+php5.6+mysql5.6,服务程序安装在C盘,把网站配置在E:\webs,使用以下的配置(httpd.conf):
DocumentRoot "E:/webs"
<Directory "E:/webs">
Options -Indexes
Options +FollowSymlinks
AllowOverride None
Require all granted
</Directory>

(更多…)

Nginx下开启错误提示的配置

星期一, 六月 6th, 2016

修改1:/usr/local/php/etc/php.ini,把
display_errors = Off
改成
display_errors = On

修改2:/usr/local/php/etc/php-fpm.conf,把
;php_flag[display_errors] = off
改成
php_flag[display_errors] = on

然后重启php-fpm:
/etc/init.d/php-fpm restart

在树莓派中部署MySQL

星期五, 一月 15th, 2016

上一篇说到在树莓派中部署Nginx+PHP,在这里可以找到部署MySQL的方法,在这里可以找到给php部署mcrypt扩展的方法。

命名汇总如下:

sudo apt-get install mysql-server
sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
sudo cp /usr/share/doc/mysql-server-5.5/examples/my-small.cnf /etc/mysql/my.cnf
echo 修改/etc/mysql/my.cnf在[mysqld]下增加一行:query_cache_size = 8M
sudo service mysql restart
sudo apt-get install php5-mysql
echo php增加mcrypt扩展方法
sudo apt-get install php5-mcrypt
sudo php5enmod mcrypt
echo 最后要重启php
sudo service php5-fpm restart

最后到这里下载phpmyadmin部署即可:把解压后所有文件复制进/var/www/phpmyadmin目录下,把config.sample.inc.php复制成config.inc.php,打开修改$cfg['blowfish_secret'] = '',单引号里加上随机的字符串即可。

php-fpm.conf两个至关重要的参数

星期二, 二月 25th, 2014

摘自:http://www.cnblogs.com/xiaochaohuashengmi/archive/2011/03/15/1984969.html

最近我在LocVPS上部署的PHP经常报“502 Bad Gateway”错误,启用并查看php-fpm.log可以看到max_children暴掉了,我默认的时候是5个,request_terminate_timeout没启用。网上找到下面这个解决方法,由于我的VPS是Xen 512M 双核的,服务器上还部署了其它应用,因此我把request_terminate_timeout设成480(8分钟稍大于nginx服务器配置里的5分钟),max_children设成15,但愿问题能解决。下面是转载正文:

nginx.conf的http域规定了PHP-CGI的连接、发送和读取的时间,300秒足够用了,因此服务器很少出现504 Gateway Time-out这个错误。最关键的是php-fpm.conf的设置,这个会直接导致502 Bad Gateway和504 Gateway Time-out。

下面我们来仔细分析一下php-fpm.conf几个重要的参数:
php-fpm.conf有两个至关重要的参数,一个是“max_children”,另一个是“request_terminate_timeout”,我的两个设置的值一个是“40”,一个是“900”,但是这个值不是通用的,而是需要自己计算的。

(更多…)

让Twip支持UberTwitter老版本

星期一, 二月 17th, 2014

去年5月份前@yegle更新的Twip版本在O模式里也调用了$this->uri_fixer()函数,因此用“修正对API1.1的支持”增加$replacement数组的替换项就可以支持UberTwitter v0.971了,因为新的API不再支持replies.json和mentions.json。

今天使用“get clone https://github.com/twip/twip”取到最新的源码,UberTwitter里仍用O模式就发现做了$replacement数组的替换还是刷不了@消息,仔细查看代码才发现O模式的override_mode()函数里不再调用$this->uri_fixer()函数了,只好自己修改代码了,在第189行处插入以下代码:

$replacement = array(
'mentions.json' => 'mentions_timeline.json',
'replies.json' => 'mentions_timeline.json',
);
$forwarded_request_uri = str_replace(array_keys($replacement), array_values($replacement), $this->forwarded_request_uri);

并把其后的两处$this->forwarded_request_uri变量替换成$forwarded_request_uri即可支持UberTwitter:

$filterName = Twip::encode_uri($forwarded_request_uri);
$parts = parse_url($forwarded_request_uri);

更新的twip.php文件参见本地:twip.php.txt,替换时把后缀.txt去掉。

另外提一下在Nginx配置文件里的重定向处理方法,假设twip部署在http://youdomain.com/twip目录,除了config.php的配置成“define('BASE_URL','http://youdomain.com/twip/');”外,还需要修改ngix.conf,添加下面几行:

location /twip {
if (!-e $request_filename) {
rewrite ^/twip/(.*)$ /twip/index.php last;
}
}

如果目录有变化,请对应修改上的twip部分。

PHP强制刷新图片的方法

星期三, 二月 12th, 2014

在编写PHP自动处理脚本时可能会遇到需要输入验证码的情况,比如我在写淘宝店铺助手时就要求登录时必须输入验证码。解决办法是增加一个专用登录页面,在登录时如果遇到需要输入验证码的情况就通过curl使用同一个cookie在同一session下从目标服务器取到验证码保存成本地图片,然后在专用登录界面显示该验证码图片让用户输入对应的验证码,再提交完成登录,登录结果自动保存在cookie里,之后使用同一cookie在同一session里使用就不再需要登录。

为了方便管理,每次登录时都保存成images/checkcode.jpg,在专用登录界面如果使用常规方法<img src="images/checkcode.jpg">显示验证码图片,浏览器会优先从缓存读取图片来显示,这样用户看到的是旧的验证码图片,解决办法是在jpg文件后加随时间变化的参数,比如“日时分秒”数值:

$content = getContent($checkcode_url);
file_put_contents('images/checkcode.jpg', $content);
echo '<form action="login.php" method="post"><img src="images/checkcode.jpg?' . date('dHis') . '" width="100" height="30" border="1"> <input name="checkcode" type="text" size="8"> <input type="submit" name="Submit" value="提交"></form>';

配置使用cookie的脚本:
define('COOKIE_FILE', 'tbcookie');
curl_setopt($ch, CURLOPT_COOKIEJAR, realpath(COOKIE_FILE));
curl_setopt($ch, CURLOPT_COOKIEFILE, realpath(COOKIE_FILE));

推荐一个开源的PHProxy

星期三, 九月 18th, 2013

PHProxy是一个网页代理的PHP源码,下载源码直接放到自有的PHP空间上即可通过浏览器使用。通过它可以实现在自己的PHP空间访问受限的目标网站,再把内存传回本地的浏览器上显示,它会把所有的链接全部替换成你部署PHProxy目录的链接,通过q变量传递该链接被加密后生成的参数,所以不会被GFW发现是访问导常网站而重置。

但还有个问题是网站内容没办法避开GFW的监测,虽然GFW不常这么做,因为此法会大大加重GFW的处理量,一般只会对特定的域名或IP做内容监测。以防万一,在部署PHProxy的地方推荐用SSL,可申请StartSSL免费一年的SSL证书。另外就是在域名根目录放一个文件名是robots.txt的文本文件,内容写下面两行,告诉正规的搜索引擎别搜索这个站点:
User-agent: *
Disallow: /

当然还有不正规的搜索引擎不遵守这个国际规范,尤其是某些国家,所以部署了PHProxy站点就不要公开使用了,私用或在可靠的熟人朋友之间使用即可。

这个PHProxy不支持视频,用来看看页面、图片就好了,想用视频就用goagent吧。

(更多…)

利用Dropbox备份/恢复个人VPS

星期六, 四月 14th, 2012

几天前,搭建自己WordPress博客的个人VPS被毁,好在更早前得知Dropbox能运行于Linux VPS上用于备份文件内容,所以本博没有太大损失,除了重搭VPS环境所花的时间。

Dropbox得用https方式来访问,不然的话连接会跟本域名lordong.net一样被重置,另外为了防止域名解析被污染(即DNS污染),建议使用国外的DNS服务器,比如Google的8.8.8.8和8.8.4.4。

Dropbox我就不多说了,通过邀请注册机制可以双方同时增加一定量的免费空间(以前是250MB,现在是500MB),默认是2GB,这是我的邀请:http://db.tt/okeXDNf

因为我已经有了备份,这里主要说我恢复的经过,恢复完了也就完成了备份的准备了。

(更多…)

PHP备份MySQL数据库源码

星期五, 十一月 25th, 2011

参考来源:中国站长网

对源代码做了局部修正:
1. 增加PHP头,声明以utf-8输出。
2. 考虑到通过crontab来每12个小时备份一下,因此文件名增加了到时间date('YmdH')。
3. 新建db子目录用于存放sql数据库,这样就不影响到php源码的整洁。
4. 把那些让人不知所以然的“rn”替换成正确的代码。
(更多…)

关于 flock LOCK_NB的问题

星期一, 十一月 14th, 2011

在自己的VPS上部署了淘宝助手PHP代码,想每分钟去扫一下自己充值店的订单并发相应的邮件提醒,但不知怎么原因经常前一分钟的任务卡在那里还没有完成下一分钟的任务就已经开始,所以经常导致有多个扫描进程卡在那里,占用了偶稀有的VPS系统内存。

为此想到了PHP的flock函数,找到测试代码并改写如下用于测试:

<?php
$file = fopen("test.txt", "w+");
// 排它性的锁定
if (flock($file, LOCK_EX | LOCK_NB))
{
	fwrite($file, "Write something");
	sleep(10);
	// release lock
	flock($file, LOCK_UN);
	echo 'Done';
}
else
{
	echo "Error locking file!";
}
fclose($file);
?>

然后在Chrome浏览器里打开两个Tab分别浏览这个PHP文件,但执行结果总是都走fwrite那条线,折腾了很久总是不得要领,还有网上找了好多资料。

今天总算在这里找到解决办法,其实上面的代码已经解决了问题,只是使用的Chrome浏览器“请求两个相同页面的时候,其实是让一个去请求,另一个想坐享其成,所以产生了差异”,按前面看到的办法“用ctrl+F5强制刷新两个页面发起请求效果就出来了”。