Posts tagged tip
在 Bluehost 主机上修改时区
0在 Bluehost 主机上用 Serendipity 做 Blog,一切都很满意,就是时区的问题。虽然 configure 里面能够设置时区偏移量,但是 RSS 输出后都是 GMT 时间,但是大部分 RSS Reader 都没有做过设置,一个朋友就经常看见我写的 Blog 在未来发表的!
修改时区最好的方法就是修改 php.ini 里面的 date.timezone 属性就可以了,这样可以不修改任何程序。但是只支持 PHP5 或者更高版本,现在我的主机用的 PHP 版本是 4.4.4,不能用。当然也不能用 date_timezone_set() 这样的函数了。
不过发现一个也不算麻烦的方法。代码如下:putenv("TZ=PRC");
putenv() 函数用得不多,所以开始也没有考虑到。不过官方的手册里面居然没有找到都能设置什么环境变量,只有其他的相关函数里面零星的介绍。
该死的 Updater5 文件夹
1最近新装了机器的操作系统,发现我的文档下面总有一个该死的 Updater5 文件夹,没有任何文件,也没有任何进程使用,删除了下次还出现,甚为烦恼。
今日 Google 之,发现是新安装的 Adobe Reader 8 用来存放升级文件的目录。
删除办法如下:
- 启动 Adobe Reader 8;
- 从 Help 菜单中选择 Check for Updates;
- 在 Adobe Updater 屏幕,选择 Preferences;
- 在 File Location 面板里面,把 download location 换个地方,我选择了 Windows 的临时文件夹。
NND, Adobe 这么大一个公司,居然能做出这么狗屎的功能。你给我升级,很好,但是别告诉我细节,我是用户,不是开发者。而且,人家 Windows 好好的临时文件夹不用,非要自作多情的在我的文档里面建一个文件夹。真把自己当棵葱了。
PS:好久没有关注 Reader 的动态,突然从 6 跳到 8,界面还不错,蛮好看的。启动速度也不错了,呵呵,赞一个。
PS2:现在居然对新软件都没有任何兴趣了,看来真的老了。
PS3:参考页面:http://lists.techwr-l.com/pipermail/techwr-l/2007-January/013203.html
[LAMP] 页面以及显示 traceroute 的结果
0今天遇到的一个问题,要求在一个页面中实时的显示 traceroute 的结果,因为这个一般会比较长时间运行,所以要求立即显示,这样就需要对输出进行控制。
第一次想的是,用一个隐藏 iframe,然后 iframe 定时刷新,取出数据来。这样的问题是不知道什么时候结束,就会一直刷新下去,直到用户点击另一个页面。
然后改用输出控制,首先使用 flush(),但是没有任何效果。后改用 ob_ 这一些系列函数。达到了我要的效果。
程序如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php ob_implicit_flush (); $cmd = "traceroute www.google.com"; $fd = popen($cmd, "r"); $result = ""; if ($fd) { while ($buffer = fgets($fd, 4)) { $result .= $buffer; ob_start("test"); echo "<script> result.innerHTML = \"" . str_replace("\n", "", nl2br(htmlspecialchars($result))) . "\";</script>\n"; ob_flush(); } } pclose($fd); ?> |
[LAMP] 让 PHP 执行 root 权限的指令
0今天下午 Mito 在 QQ上问我如何用 PHP 执行系统指令,还要 root 权限,原来是他们老板要管理员通过 Web 修改系统时间日期……无语中,这个要求真 TMD 变态。
不过这个问题我也不会,测试一下重定向和管道技术把密码发给 su 指令,提示信息是:
1 | 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() 函数来关闭它。
实例:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php /* PHP中如何增加一个系统用户 下面是一段例程,增加一个名字为james的用户, root密码是 verygood。仅供参考 */ $sucommand = "su --login root --command"; $useradd = "useradd "; $rootpasswd = "verygood"; $user = "james"; $user_add = sprintf("%s "%s %s"", $sucommand, $useradd, $user); $fp = @popen($user_add, "w"); @fputs($fp, $rootpasswd); @pclose($fp); ?> |
Recent Comments