使用@fopen时出错

时间:2009-05-20 09:20:38

标签: php fopen

我正在使用@fopen以“rb”模式打开文件。我在这里打开的文件运行时没有错误,但是如果我使用@fopen打开该文件则会出错。

代码是这样的---

$file = @fopen("xyz.com","rb") or $flag=1;

if($flag==1)
{
    mail($to, $subject, $message, $from);
    die();
}

有时它会在没有发送任何错误邮件的情况下打开,但有时它会开始提供这么多错误邮件。

在没有任何错误邮件的情况下打开此网址的解决方案是什么?请帮助!!

6 个答案:

答案 0 :(得分:1)

如果您尝试打开一个URL(假设您包含的'xyz.com'),那么您需要在它之前包含架构声明。例如。 http://xyz.com,否则PHP将尝试打开本地文件。如果您指的是本地文件,请确保在Windows上使用任何反斜杠。

但是,其他代码示例中没有其他任何内在错误导致问题。 @只是简单地抑制错误输出,因此它不会导致任何奇怪的行为。

尽管如此,处理它的更好方法可能是这样做:

$file = @fopen("xyz.com","rb");

if(!$file)
{
    mail($to, $subject, $message, $from);
    die();
}

答案 1 :(得分:1)

尝试使用

file_get_contents(); 

而不是fopen()。

答案 2 :(得分:0)

顺便说一下,当出现错误时,你设置$ flag = 1。但如果上次出现错误怎么办呢?这次没有错误? (然后$ flag仍然是前一次的1)。

答案 3 :(得分:0)

从fopen方法的开头删除'@'字符,(@符号存在任何php驱动的错误消息)这将给你解释为什么php认为你无法打开该文件 - 我会危险猜测文件的路径或文件的权限是无效的。

答案 4 :(得分:0)

什么是错误讯息?我们可以在没有它的情况下猜测问题。

你的ini中是否总是允许url fopen?也许这个值会用ini_set()覆盖某个地方?

您确定,该网址是否正确且主机是否还活着?

最后,我建议改用fsockopen。它提供了更灵活的远程连接,错误处理以及设置连接超时的可能性。

答案 5 :(得分:0)

@符号可以抑制错误,因此永远不会设置$ flag