这是去年晚些时侯发现的一个问题。
公司产品的后台定时任务应该是用独立的PHP进程驱动的。在做一个项目的时候,为了便于手工调试,我在定时任务中使用了大量的echo输出信息并在浏览器中手工执行此任务的脚本。
手工执行通过,输出信息完全没有问题。但在实际运行的过程中,一个很诡异的事情发生了:即使我将实际处理数据的代码全部注释掉,只对原始数据做简单的查询,此定时任务仍然极其健壮地中途退出。最要命的是无论程序日志还是PHP的错误日志,都没有任何相关信息。直到后来我把所有echo输出都取消,问题才解决。
事后模糊地记得很久以前似乎在哪本书上看到过在无输出设备的情况下echo过多数据会导致PHP进程崩溃的内容,但原因已想不起来了。
VirtualBox安装后默认的网络接入方式是NAT,也是最简单的一种。但NAT网络中的虚拟机系统不具有和主机同一网段的IP地址,不能和主机直接通信。这对于开发者来说是不适用的。
Host Interface网络接入方式可以使虚拟机系统获得与主机同一网段的IP地址,因此也使得虚拟机系统像主机所在的局域网中的一台真实的计算机一样,可以和其它计算机通信。
对于Linux平台的VirtualBox,可以有两种方式实现Host Interface网络。一是使用系统网桥,二是使用VirtualBox内建的机制。
第一种方式复杂但通用,尤其是对于2.1.0以前的版本来说,这是唯一的途径。从2.1.0开始,VirtuaBox内建了支持Host Interface的机制,这极大地简化了此类型网络的配置。
首先,加载vboxnetflt模块:
sudo modprobe vboxnetflt
然后在VirtualBox中配置虚拟机的网络连接方式,选择“Bridged Adapter”。
最后启动虚拟机即可。
另外,若虚拟机系统是精简版的Windows,网卡驱动可能不会自动安装,这时需要另外下载网卡的驱动并安装。
为方便起见,可将vboxnetflt模块加入到开机自动启动的模块列表中,每种发行版设置自启动模块的位置和方法不一样,在Archlinux下,是在/etc/rc.conf文件中的modules行中设置。
参考文章:Archlinux Wiki: VirtualBox
第一次换域名,花在查资料上的时间远比实际用的时间多,感谢总统,感谢Google,新域名总体上顺利地接替了原来的CN域名。以下是我这次更换域名的步骤:
1、修改新域名的A记录,只是更新一下新域名默认的A记录值,去他爹的域名管理工具很人性化,常用的CNAME基本上都有了。此为域名的解析。
2、进入主机的CPanel,添加一个附加域,此为域名的绑定。
3、使用Wordpress Database Backup插件备份数据库。
4、进入Wordpress后台,修改用户的URL地址、“Wordpress安装地址”和“博客地址”。
5、进入主机的phpMyAdmin,更新各表数据:
SQL:
-
--替换文章中的内部链接,若文章内容中有原域名,这样的替换会连文章内容中的域名一并替换掉,所以平时在文章中写当前的域名时要做些手脚,免得将来更换域名时替换掉
-
UPDATE wp_posts SET post_content=REPLACE(post_content,'http: //www.leninlee.cn','http: //sinolog.it');
-
UPDATE wp_posts SET post_content=REPLACE(post_content,'http: //leninlee.cn','http: //sinolog.it');
-
--替换文章的永久链接
-
UPDATE wp_posts SET guid=REPLACE(guid,'http: //www.leninlee.cn','http: //sinolog.it');
-
UPDATE wp_posts SET guid=REPLACE(guid,'http: //leninlee.cn','http: //sinolog.it');
-
--替换评论中的链接
-
UPDATE wp_comments SET comment_author_url=REPLACE(comment_author_url,'http: //www.leninlee.cn','http: //sinolog.it');
-
UPDATE wp_comments SET comment_author_url=REPLACE(comment_author_url,'http: //leninlee.cn','http: //sinolog.it');
-
UPDATE wp_comments SET comment_content=REPLACE(comment_content,'http: //www.leninlee.cn','http: //sinolog.it');
-
UPDATE wp_comments SET comment_content=REPLACE(comment_content,'http: //leninlee.cn','http: //sinolog.it');
6、301永久重定向,将使用原域名对本站的访问都转移到新域名,尤其对搜索引擎优化有益。在主机支持.htaccess的前提下,修改Web根目录下的.htaccess文件,加入如下内容:
RewriteEngine On
RewriteCond %{HTTP_HOST} ^leninlee.cn [NC,OR]
RewriteCond %{HTTP_HOST} ^www.leninlee.cn [NC]
RewriteRule ^(.*)$ http://sinolog.it/$1 [L,R=301]
我还能说什么呢,谨献上马勒戈壁上神圣的草泥马,时日曷丧!
leninlee.cn是我第一个正式的顶级域名,自博客独立以来,走过了近三年光阴。当初用一块草泥马币买下这个域名的时候,多少有点担心,但更多的是侥幸心理,更遑论一块草泥马币的价格的诱惑。三年来已逐渐习惯的东西,多少还是有些感情的,所以当事情真的发生时,我并没有打算立即做出反应。
但服务商接二连三的邮件让我再也坐不住了,三年加一块的邮件都不如这一次多。先是说停止个人注册CN域名,然后又通知没备案的域名将被停止解析,接着又说允许个人保有旧的CN域名,最近有传闻说又准备开放个人注册?变本加厉,朝令夕改,加之别人纷纷更换域名以及去他爹不失时机的支持支付宝的消息的刺激,终于买了一个新域名。
关于域名的选择,我不太喜欢com、net、org这些主流的域名,对于个人博客的定位,我更喜欢一些另类的、非主流的域名。本来打算买个me,但没想到什么好名字,倒是在苦思冥想时发现了it,又想到了一个比较搭配的名字sinolog(也许应该把博客名称一块改成“中土志”?),于是就买了下来。去他爹的域名价格倒是不算贵,不过哪知道对一些外国域名还要收取19.9刀的代理费(Trustee Fee),加到一块就贵到发懵了,我这个it的域名买下来一共用了二百多草泥马币,比主机都贵。
以后本博客的域名就是sinolog.it了,由于FeedBurner的域名绑定是个鸡肋,所以不再使用统一的Feed订阅地址,同时提供FeedBurner和Feedsky两个地址,原来订阅feed.leninlee.cn的人应尽快更换了,原域名在三个月后到期并不再续费,但不知道会不会在这个月底就被停止解析。
从周日到今天,基本上完成了包括域名更换、数据库替换、博客模板修改、301重定向等工作,新域名已可完全取代原域名正常运作了。
前天收到去他爹的邮件,送了一个优惠码,可以以7.49刀的价格购买一个com域名或续费,2010-02-01过期:2NCS749。
若本机安装有Oracle官方的客户端,则直接安装PL/SQL Developer并稍加配置即可。本文针对既不想安装几百兆大小的Oracle客户端,又需要访问Oracle服务器的情况。
首先,到Oracle官网下载Instant Client基础包,并解压到硬盘,例如:C:\instantclient。
在instantclient目录下创建名为network的目录,在此目录下创建名为admin的目录,然后在其中创建名为tnsnames.ora的文件,文件内容如下:
db_name=(
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))
)
(CONNECT_DATA=
(SERVER=DEDICATED)
(SERVICE_NAME=oracle)
)
)
将db_name替换成数据库的名称,192.168.1.100替换成数据库服务器的IP地址即可。
然后打开PL/SQL Developer,进入程序选项设定对话框:Tools→Preferences。在Oracle→Connection面板中的Oracle Home中输入C:\instantclient,在OCI Library中输入C:\instantclient\oci.dll。
保存后重启PL/SQL Developer,在登录对话框中的Database下拉列表中选择数据库的名称,输入用户名和密码即可登录。
如果数据库的语言和字符集与客户端操作系统默认的不同,则在数据库中操作非英文字符可能会得不到预期的结果。如遇这种情况,可使用如下语句查询数据库的语言和字符集:
select * from v$nls_parameters
在查询结果中找到NLS_LANG和NLS_CHARACTERSET两个环境变量,然后在PL/SQL Developer的安装目录中创建批处理文件startplsqldev.bat:
@echo off
set NLS_LANG=AMERICAN.AL32UTF8
plsqldev.exe
其中,AMERICAN替换为刚才查询到的NLS_LANG变量的值,AL32UTF8替换为NLS_CHARACTERSET的值。然后使用此批处理文件启动PL/SQL Developer即可。