Entries tagged as tip
在 Bluehost 主机上修改时区 Mon, Mar 12. 2007
在 Bluehost 主机上用 Serendipity 做 Blog,一切都很满意,就是时区的问题。虽然 configure 里面能够设置时区偏移量,但是 RSS 输出后都是 GMT 时间,但是大部分 RSS Reader 都没有做过设置,一个朋友就经常看见我写的 Blog 在未来发表的!
修改时区最好的方法就是修改 php.ini 里面的 date.timezone 属性就可以了,这样可以不修改任何程序。但是只支持 PHP5 或者更高版本,现在我的主机用的 PHP 版本是 4.4.4,不能用。当然也不能用 date_timezone_set() 这样的函数了。
不过发现一个也不算麻烦的方法。代码如下:
putenv() 函数用得不多,所以开始也没有考虑到。不过官方的手册里面居然没有找到都能设置什么环境变量,只有其他的相关函数里面零星的介绍。
[LAMP] 页面以及显示 traceroute 的结果 Tue, Jul 5. 2005
今天遇到的一个问题,要求在一个页面的 中实时的显示traceroute的结果,因为这个一般会比较长时间运行,所以要求立即显示,这样就需要对输出进行控制。
第一次想的是,用一个隐藏iframe,然后iframe定时刷新,取出数据来。这样的问题是不知道什么时候结束,就会一直刷新下去,直到用户点击另一个页面。
然后改用输出控制,首先使用flush(),但是没有任何效果。后改用ob_ 这一些系列函数。达到了我要的效果。
程序如下:
- <?php
- $cmd = "traceroute www.google.com";
- $result = "";
- if ($fd) {
- $result .= $buffer;
- echo "<script> result.innerHTML = \"" . str_replace("\n", "", nl2br(htmlspecialchars($result))) . "\";</script>\n";
- }
- }
- ?>
[LAMP] 让 PHP 执行 root 权限的指令 Mon, Apr 11. 2005
今天下午 Mito 在 QQ上问我如何用 PHP 执行系统指令,还要 root 权限,原来是他们老板要管理员通过 Web 修改系统时间日期……无语中,这个要求真 TMD 变态。
不过这个问题我也不会,测试一下重定向和管道技术把密码发给 su 指令,提示信息是:
su: must be run from a terminal
不过想想也是正常,安全问题嘛,小心为好。不过还是不死心,搜索了一下解决方法。
其中让 PHP 执行系统命令有以下几种方法:
- string system (string command [, int return_var]);
- string exec (string command [, string array [, int return_var]]);
(以上两个傻子都知道) - void passthru (string command [, int return_var]);
这个有点新鲜,说明是:passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
实例:
- 用“`”符号,这个……估计呆子也能知道,居然那个网站还觉得是秘籍……汗ing
最重要的,也是解决 root 权限的方法,就是使用 popen() 函数打开进程。
原网站上说明如下:上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加 Linux 的系统用户时,要调用 su 来把当前用户换到 root 才行,而 su 命令必须要在命令行上输入 root 的密码。这种情况下,用上面提到的方法显然是不行的。popen() 函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在 PHP3 中,对这种句柄只能做单一的操作模式,要么写,要么读;从 PHP4 开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用 pclose() 函数来关闭它。
实例:
- <?php
- / PHP中如何增加一个系统用户
- 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 /
- $sucommand = "su --login root --command";
- $useradd = "useradd ";
- $rootpasswd = "verygood";
- $user = "james";
- ?>
