fopen的问题,无法理解,在本地就是不能打开文件

victorzk 2007-11-15 04:26:58
$handle = fopen("/home/rasmus/file.txt", "w");
if(!handle){
print "yes";
}else{
print "no";
}
系统是linux系统,查看php参数,php版本4.3.9,allow_url_open为打开on
但是不管怎样总是无法打印“no”,总是打印yes,请问这是为什么呢?是什么原因呢?
...全文
269 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
victorzk 2007-11-19
  • 打赏
  • 举报
回复
改成相对路径也不行,提示failed to open stream: Permission denied。。。。

哭了,一个星期没有解决这个问题了,我快崩溃了
有理想的草根 2007-11-19
  • 打赏
  • 举报
回复
chmod("/home/rasmus/file.txt", 0755);
加入这句话后,再读下这个文件试试返回的是什么?如果返回的是true则说明该用户可以访问,否则该文件,该用户不能被访问。
这句话,在读入之前处理。
试下吧。
wgt20 2007-11-19
  • 打赏
  • 举报
回复
第七行!handle=>!$handle
phpknows 2007-11-17
  • 打赏
  • 举报
回复
你用ROOT改过HOME的属性么?WEB服务器的用户和HOME属于一个组么?
建议用相对路径比较好。
phpknows 2007-11-16
  • 打赏
  • 举报
回复
$handle = fopen( "/home/rasmus/file.txt ", "w ");
if($handle){
print "yes ";
echo is_file('/home/rasmus/file.txt') ? 'yes':'no';
}else{
print "no ";
}
逸学堂 2007-11-16
  • 打赏
  • 举报
回复
使用sudo执行,或者在root用户执行
victorzk 2007-11-16
  • 打赏
  • 举报
回复
错误提示是:
Notice: Undefined variable: handle in /project/redirect.php online 3

Warning: fopen(/home/rasmus/file.txt): faailed to open stream: Permission denide in /project/redirect.php on line 3

Notice : Undefined variable: handle in /project/redirect.php on line 7
yes

redirect.php就是我写的php文件第3行是$handle = fopen( "/home/rasmus/file.txt ", "w ");
第7行是if(!handle){

我服了啊,文件夹权限都已经打开了啊?急死了!
victorzk 2007-11-16
  • 打赏
  • 举报
回复
我用root用户执行还是不行啊??为什么呢?是不是还有其他说法啊?
逸学堂 2007-11-15
  • 打赏
  • 举报
回复
在tmp中创建试试
把display_error开关打开,查看一下具体错误吧。
安你的操作,对应手册应该没有问题的。
open() 将 filename 指定的名字资源绑定到一个流上。如果 filename 是 "scheme://..." 的格式,则被当成一个 URL,PHP 将搜索协议处理器(也被称为封装协议)来处理此模式。如果该协议尚未注册封装协议,PHP 将发出一条消息来帮助检查脚本中潜在的问题并将 filename 当成一个普通的文件名继续执行下去。

如果 PHP 认为 filename 指定的是一个本地文件,将尝试在该文件上打开一个流。该文件必须是 PHP 可以访问的,因此需要确认文件访问权限允许该访问。如果激活了安全模式或者 open_basedir 则会应用进一步的限制。

如果 PHP 认为 filename 指定的是一个已注册的协议,而该协议被注册为一个网络 URL,PHP 将检查并确认 allow_url_fopen 已被激活。如果关闭了,PHP 将发出一个警告,而 fopen 的调用则失败。

注意: 所支持的协议列表见附录 N, 支持的协议/封装协议列表。某些协议(也被称为 wrappers)支持 context 和/或 php.ini 选项。参见相应的页面哪些选项可以被设定(例如 php.ini 中用于 http wrapper 的 user_agent 值)。

注意: 对 context 的支持是 PHP 5.0.0 添加的。有关 context 的说明见Streams。

注意: 自 PHP 4.3.2 起,对所有区别二进制和文本模式的平台默认模式都被设为二进制模式。如果在升级后脚本碰到问题,尝试暂时使用 't' 标记,直到所有的脚本都照以下所说的改为更具移植性以后。

mode 参数指定了所要求到该流的访问类型。可以是以下:
victorzk 2007-11-15
  • 打赏
  • 举报
回复
对啊,我就是想不存在就创建,问题是不创建啊,w,w+,x,x+都试验了,都不行啊
duanjianbo26 2007-11-15
  • 打赏
  • 举报
回复
你打开方式是"W",如果不存在它会自己创建一个file.txt
victorzk 2007-11-15
  • 打赏
  • 举报
回复
回复逸学堂,我照你的去做了,但还是不好使啊,还是打印yes 啊
wisword 2007-11-15
  • 打赏
  • 举报
回复
if(!handle){
==》
if(!$handle){
逸学堂 2007-11-15
  • 打赏
  • 举报
回复
需要在php.ini中的open_basedir配置
把/home/rasmus/目录加到open_basedir后面就可以了

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧