0

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

代码是这样的---

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

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

有时它会打开而没有发送任何错误邮件,但有时它会开始提供如此多的错误邮件。

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

4

6 回答 6

1

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

但是,您的代码示例的其余部分本质上没有任何其他问题会导致问题。@ 只是抑制错误输出,因此它本身不会导致任何奇怪的行为。

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

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

if(!$file)
{
    mail($to, $subject, $message, $from);
    die();
}
于 2009-05-20T09:29:36.707 回答
1

尝试使用

file_get_contents(); 

函数而不是 fopen()。

于 2009-05-20T13:50:58.300 回答
0

顺便说一句,当出现错误时,您正在设置 $flag = 1。但是如果上次有错误而这次没有错误怎么办?(那么 $flag 仍然是前一次的 1)。

于 2009-05-20T09:38:11.773 回答
0

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

于 2009-05-20T09:39:04.127 回答
0

什么是错误信息?我们可以猜测没有它的问题。

您的ini中是否始终允许使用url fopen?也许这个值用 ini_set() 覆盖了某个地方?

您确定该网址正确且主机还活着吗?

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

于 2009-05-20T11:10:02.667 回答
0

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

于 2010-08-09T15:34:56.717 回答