定义和用法
filesize() 函数返回指定文件的大小。
若成功,则返回文件大小的字节数。若失败,则返回 false 并生成一条 E_WARNING 级的错误。
语法
filesize(filename)
参数 | 描述 |
---|---|
filename | 必需。规定要检查的文件。 |
提示和注释
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。
例子
<?php echo filesize("test.txt"); ?>
filesize() 函数返回指定文件的大小。
若成功,则返回文件大小的字节数。若失败,则返回 false 并生成一条 E_WARNING 级的错误。
filesize(filename)
参数 | 描述 |
---|---|
filename | 必需。规定要检查的文件。 |
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。
<?php echo filesize("test.txt"); ?>
clearstatcache() 函数清除文件状态缓存。
有时函数会缓存某些函数的返回信息,以便提供更高的性能。但是有时候,比如在一个脚本中多次检查同一个文件,而该文件在此脚本执行期间有被删除或修改的危险时,你需要清除文件状态缓存,以便获得正确的结果。要做到这一点,就需要使用 clearstatcache() 函数。
会进行缓存的函数,即受 clearstatcache() 函数影响的函数:
clearstatcache()
filemtime() 函数返回文件内容上次的修改时间。
若成功,则时间以 Unix 时间戳的方式返回。若失败,则返回 false。
filemtime(filename)
参数 | 描述 |
---|---|
filename | 必需。规定要检查的文件。 |
本函数返回文件中的数据块上次被写入的时间,也就是说,文件的内容上次被修改的时间。
提示:本函数的结果会被缓存。请使用 clearstatcache() 来清除缓存。
$a=filemtime("log.txt"); echo "修改时间:".date("Y-m-d H:i:s",$a).";
使用Ajax技术做动态加载的网站,有时也需要定时拉取服务器信息,比如给登录用户发送消息之类的.这里介绍两个函数,setInterval开始定时执行一个任务,clearInterval终止指定的任务.
setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。
setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。
setInterval(code,millisec[,"lang"])
参数 | 描述 |
---|---|
code | 必需。要调用的函数或要执行的代码串。 |
millisec | 必须。周期性执行或调用 code 之间的时间间隔,以毫秒计。 |
一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。
clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。
clearInterval(id_of_setinterval)
参数 | 描述 |
---|---|
id_of_setinterval | 由 setInterval() 返回的 ID 值。 |
下面这个例子将每隔 50 毫秒调用 clock() 函数。您也可以使用一个按钮来停止这个 clock:
<html> <body> <input type="text" id="clock" size="35" /> <script language=javascript> var int=self.setInterval("clock()",50) function clock() { var t=new Date() document.getElementById("clock").value=t } </script> <button onclick="int=window.clearInterval(int)">Stop interval</button> </body> </html>
做了一个ajax的站,php后台处理完了数据库后,需要把结果以json数据的方式发到前端由js使用,编程这东西,编码总是会莫名其妙造成影响…
//$result是一个mysql查询的结果集 while($row = mysql_fetch_array($result)){ foreach ( $row as $key => $value ) { $row[$key] = urlencode ( $value ); } $urlencode_result[$i++]=$row; } $json = urldecode(json_encode($urlencode_result));
以上代码,首先把结果集中的每个值都urlencode来解决可能出现的编码问题,然后json_encode,把已经urlencode处理过的转成json数据,最后把json数据中被urlencode的数据恢复.
原理就是PHP的json_encode会把中文转成乱码,但是在json_encode前先urlencode,这样就没有中文了,转为json后没有问题,转换完,要用的时候在urldecode恢复中文数据.
你可能还需要看看PHP读取MYSQL数据后中文乱码的解决方法
做模拟登陆或者后台任务的时候,可能会需要php在后台直接post数据到其他页面,并且获取返回结果来进行下一步处理.可能比较常用的是curl,不过在一些简单的地方使用,感觉有些麻烦,一个post要一大堆代码…
善用搜索引擎,发现了一个比较简单的post数据的方式,封装成一个函数方便调用.
function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => array( 'method' => 'POST', 'content' => $data )); if ($optional_headers !== null) { $params['http']['header'] = $optional_headers; } $ctx = stream_context_create($params); $fp = @fopen($url, 'rb', false, $ctx); if (!$fp) { throw new Exception("Problem with $url, $php_errormsg"); } $response = @stream_get_contents($fp); if ($response === false) { throw new Exception("Problem reading data from $url, $php_errormsg"); } return $response; }
调用方法:
do_post_request($url,$data,$headers); //第一个参数写post的对象,需要写绝对地址,例如"http://www.devsk.com" //第二个参数写要post的数据,例如"a=1&b=2",目标页面$_POST['a']的值就是1,$_POST['b']的值就是2 //第三个参数可以不填,如果需要设置header,则可以在第三个参数输入,比如要传递cookie,可以写"Cookie:ID=123" //函数返回值就是目标页面的输出 //完整的调用实例: $result = do_post_request("http://www.devsk.com","a=1&b=2","Cookie:ID=123"); //向http://www.devsk.com页面post数据,包含两个变量(a=1 b=2)和一个cookie (ID=123).最后http://www.devsk.com页面的输出赋值给变量$result.
有时为了调试程序,需要查看所有POST过来的数据.
file_get_contents("php://input"); echo file_get_contents("php://input");
有些mysql查询返回的结果仅仅是成功或失败.
也许有些查询影响的行数为0,但是这个查询没有错误,那么返回的也是执行成功,然而有的时候是需要知道查询影响了多少条数据的.
PHP有个函数
mysql_affected_rows();
可以取得最近一次 INSERT,UPDATE 或 DELETE 查询所影响的记录行数。
这个函数可以带一个MYSQL连接标识符的参数,如果不加参数,如果没有指定,默认使用最后被 mysql_connect() 打开的连接。
执行成功,则返回受影响的行的数目,如果最近一次查询失败的话,函数返回 -1。
如果最近一次操作是没有任何条件(WHERE)的 DELETE 查询,在表中所有的记录都会被删除,但本函数返回值在 4.1.2 版之前都为 0。
当使用 UPDATE 查询,MySQL 不会将原值与新值一样的列更新。这样使得 mysql_affected_rows() 函数返回值不一定就是查询条件所符合的记录数,只有真正被修改的记录数才会被返回。
REPLACE 语句首先删除具有相同主键的记录,然后插入一个新记录。该函数返回的是被删除的记录数加上被插入的记录数。
有时候写前端界面的时候,有些文字内容比较长,我们希望他能自动换行.
比如一个表格里面的内容,本来设置了表格宽度,但是实际有时内容过长,换行就出了问题,有些情况会自动换行,有些时候不会,这样就可能把布局搞乱.
只要在css里面把要强制换行的元素加上
Word-break: break-all;
属性就可以了,比如设定表格宽度后,加上这个属性,那么不管内容是啥,只要超过了宽度就会换行.
有的虚拟主机不让在前台显示错误,这是一种保护措施,避免一些用户使用不安全代码而被攻击,毕竟错误信息有时能暴露出很多问题.然而有时候在调试代码的时候,如果没有直接输出错误信息,就不好确定到底出了什么问题,而每次到控制面板后台去看日志也是一个麻烦的事.
最好的当然是有php.ini修改权限,这样可以自己开关一些功能,包括错误输出.不过很少虚拟主机支持这个,至少我用过的虚拟主机都不支持…
但是问题总要解决,于是有这样一个函数ini_set(),这个函数可以设置php.ini的一些值,并在代码运行时覆盖原本php.ini的设置.
error_reporting(E_ALL); //输出所有类型的错误 ini_set("display_errors","On");//设置开启错误信息输出 ini_set('error_log', dirname(__FILE__) . '/error_log.txt'); //将出错信息输出到当前代码路径下的一个文本文件 error_log.txt
当然,大多数时候我们不会想要输出所有类型的错误,因为一些输出的信息并没有影响,并不是什么安全问题,但是输出后的错误信息对页面布局造成影响,所以正常情况会屏蔽一些不需要的信息,比如我一般是用
error_reporting(E_ALL & ~E_NOTICE);
这样屏蔽掉NOTICE类型的错误,其他显示出来的问题则都是需要去解决的.
以下是错误分级,可以使用加上 &~错误类型的方式屏蔽指定类型
错误级别分为: E_ERROR:严重错误。 E_WARNING:最普通的错误类型。 E_PARSE:解析错误在编译的时候发生。 E_STRICT:这个错误级别是唯一不包含在E_ALL常量中的,为了让PHP4到PHP5的迁移更加容易。 E_NOTICE:表示运行的代码可能在操作一些未知的事情。 E_CORE_ERROR:由于扩展启动失败等导致的。 E_COMPILE_WARNING:编译的时候出现的警告,告诉用户一些不推荐使用的语法信息。 E_COMPILE_ERROR:编译错误。
当然,也可以只使用其中一个或几个,例如:
error_reporting(E_WARNING);