通过命令行执行PHP文件写字符到外部文本 & server端与客户端的当下绝对路径 & PHP的时间设定

来源:互联网 发布:短信拦截软件 编辑:程序博客网 时间:2024/04/20 13:06

被这个问题弄好久,帖子在这里:http://topic.csdn.net/u/20120206/18/48dc82ff-ce7d-4090-9721-ba1a8a9aaaa7.html?27798


另外我想进一步实验这个做法,在PHP里有require和include指令,之前就是因为使用相对路径,没有引用成功。


继续使用帖子中的测试程序,在externalIOTest\下面创建一个conf.php文件:

<?php$Config['Version'] = '0.1.8';?>

在iotest.php内,在首行加入:


require_once('C:\xampp\htdocs\externalIOTest\conf.php');

然后修改写入文件的代码为:


fwrite($fp, date('Y-m-d H:i:s').' V: '.$Config['Version']."\r\n");

测试结果来看,这样做是成功的。


下面做一点点优化,为了增加灵活性(具体讲为可移植性),通过使用变量__FILE__来得到与运行文件同路径的conf.php文件,将:


require_once('C:\xampp\htdocs\externalIOTest\conf.php');

替换为:


require_once(dirname(__FILE__).'\conf.php');


测试通过。同理,将打开log文件返回句柄的代码也修改成:


$fp = fopen(dirname(__FILE__).'\log.txt','a+');


延伸:


到此为止,关于日志功能,已经都具有移植性,可是还有其他的地方:\preview\Amfphp\Services\eDirectoryService.php

\preview\DBLayer.php


将其原本的成员变量protected $URL = "C:/xampp/htdocs/edir-cms/daily/eDirectory.sdb",修改成通过相对路径获得数据库文件。


首先需要通过PHP的常量__DIR__来获得当前文件的路径:C:\xampp\htdocs\edir-cms\preview\Amfphp\Services\,因为在PHP中,声明类的成员变量时,不可以使用带有函数的表达式赋值,所以我需要一个构造函数来完成这个动作:


function __construct() {$this->DB_FILE = substr(__DIR__, 0, strrpos(__DIR__, 'prev')) . 'daily\\eDirectory.sdb';}

所做的事情即是从__DIR__中,截取‘prev’出现之前的字符,再把这个字符串加上数据库文件的相对路径。


客户端上的绝对路径:


以上的所有讨论都是关于在Server端如何通过PHP的常量得到当下文件的绝对路径,但是在客户端有时也需要在HTML里使用相对于当前文件的文件引用,但如果使用完整的URL来引用,则失去移植性,而在客户端显然不可以使用__FILE__或者__DIR__这一类将返回server本地磁盘的变量。


\views\menubody.php中,将preview的链接:


<li><a href="<?=dirname($_SERVER["SCRIPT_NAME"])?>/preview/edirectorypreview.html" target="_blank">Preview</a></li>

\views\page.php中,将首页链接:


<a href="<?=dirname($_SERVER["SCRIPT_NAME"])?>/index.php">.......</a>

//2012-05-17号增补:

目前的使用来看,$_SERVER["SCRIPT_NAME"]并不能够适用所有情况,当一个网站的文件是直接存放在webroot路径下时,即是说直接通过域名访问该网站:localhost——这种情况下$_SERVER["SCRIPT_NAME"]并不能如我们期望那样正确运作。因为文件直接在webroot下,它将只是返回这个文件名,而通过dirname()将得到一个空字符。


其实使用./index即可,它可以在任何情况下正常运作。

//

时间设定


默认来讲,通过date函数输出的时间并不是香港本地时间,所以需要做些修改,找到PHP.ini文件,找到[Date]标签,将下面的date.timezone = "UTC" 改为 date.timezone = "Asia/Hong_Kong"


REFs:

http://www.electrictoolbox.com/correct-php-timezone/

http://www.php.net/manual/en/timezones.asia.php

原创粉丝点击