[记录]关于php读写操作中文文件的问题
今天碰见一个问题, 采集东西, 写到目录的时候, 会报错不能打开文件, 使用英文名后, rename也不行, 判断是否存在也不行...
百度, google后, 发现原因还是...字符编码问题.
我们常用的有utf-8,gbk两种编码, php内部操作哪种都无所谓, 但是如果涉及到实体文件就必须注意一点:
文件名编码要和php环境所在系统保存一致
比如我是win下用, win肯定是gbk编码了, 所以文件名转换为gbk后, 再读写操作就ok了
今天碰见一个问题, 采集东西, 写到目录的时候, 会报错不能打开文件, 使用英文名后, rename也不行, 判断是否存在也不行...
百度, google后, 发现原因还是...字符编码问题.
我们常用的有utf-8,gbk两种编码, php内部操作哪种都无所谓, 但是如果涉及到实体文件就必须注意一点:
文件名编码要和php环境所在系统保存一致
比如我是win下用, win肯定是gbk编码了, 所以文件名转换为gbk后, 再读写操作就ok了
参考地址:
PHP手册: header — Send a raw HTTP header
w3school: PHP header() 函数
header() 函数向客户端发送原始的 HTTP 报头。
认识到一点很重要,即必须在任何实际的输出被发送之前调用 header() 函数
其实, 大部分都是用header重定向的, 但是很多人都忽略了一点, 就是header是不会停止php运行的, 所以如果用在判断然后导到不同的url去, 就要严谨点的加个exit();了
所以简单记录下吧, 免得自己忘记.
原文链接: nginx关闭favicon.ico 日志记录 禁止访问隐藏文件
把以下配置放到 server {} 块.
关闭favicon.ico不存在时记录日志
location /favicon.ico {
log_not_found off;
access_log off;
}
不允许访问隐藏文件例如 .htaccess, .htpasswd, .DS_Store (Mac).
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
有这么一个数组:
$arr = array(1, 2, 3, 4);
如果需要遍历然后修改值, 常规写法为:
foreach ($arr AS $k => $v) {
$v= $v* 2;
$arr[$k] = $v;
}
一有时间就啃PHP手册, 刚发现一简单写法:
foreach ($arr AS &$v) {
$v = $v * 2;
}
解释: 自PHP5起, 可以很容易地通过在$v之前加上 & 来修改数组的元素. 此方法将以引用赋值而不是拷贝一个值, 这样$arr[$k]就被直接修改了.
原谅的我无知, 知道的别笑话我.
先看代码:
<?php
class a
{
var $abc = array(
'a' => 'b',
'b' => array(
'a' => array('a' => time())
)
);
}
?>
然后再来看php官方文档的介绍:
类的属性
这段代码会报语法错误, 报在time()那里, 然后time()换成字符串, 或者常量, 就没事了.
其实说起来还是我基础不好, 一哥们给我的答案灰常好: "类里面变量的初始化不能是一个表达式".
官方解释的也很透彻: "属性中的变量可以初始化,但是初始化的值必须是常数,这里的常数是指php脚本在编译阶段时就为常数,而不是在编译阶段之后在运行阶段运算出的常数。"
这里time()就是个表达式, 变量同样也是个表达式, 所以会报错.