今年三月份去腾讯面试过笔试題有一题是,PHP 中的 is_writable 数不可信请写一个数来替代这个数。
拿到这个题目我便想起之前读 CI 框架实现的时候看到 CI 里面写了个 is_really_writable 数,当时没有注意只看这个数的功能,至于 CI 为什么要自己实现一个 is_writable 数的功能没有去深究当时,我的解题思路是这样的既然 is_writable 不可信,那么我就实实在茬的尝试去那个文件夹里进行写入如果可以写则返回 true,否则返回 false思路是对的,但代码并不是完全无误有瑕疵。
回到家后我便开始搜索同时重新仔细查看 CI 的那个数实现以及说明,原来是因为在 Windows 服务器上如果一个文件夹有只读属性is_writable 这个数还是会返回 true,而实际上 php 是不能進行写入的另外一种情况是,在 unix 服务器上如果 safe_mode 选项打开,那么 is_writable 数也是不可信的
这个事情提醒我,当遇到一个问题时一定要追查到底,搞明白它的原理以及那样做的理由