【问题标题】:PHP fopen() can't functionPHP fopen()无法运行
【发布时间】:2014-03-24 07:50:18
【问题描述】:

我的 PHP fopen() 读取文件时遇到问题。

错误是:

Warning: fopen(\\192.168.183.28\DIGI_PROG\M10\TEST1\P001.txt): failed to open stream: Invalid argument in C:\xampp\htdocs\digi\index.php on line 72

和我的 PHP 代码:

echo $fs = fopen("\\\\192.168.183.28\\DIGI_PROG\\M10\\TEST1\\P001.txt","r");

奇怪的是,当我尝试打开那个 URL 时,它就打开了。 为确保该文件存在。

有什么建议吗?

【问题讨论】:

  • 所有这些反斜杠在那里做什么。即使在 Windows 中也使用正斜杠作为路径
  • @presiuslitelsnoflek 我试过了,但仍然像以前一样出错
  • 另外,对非动态字符串使用单引号
  • UNC 路径可以在fopen() 中使用,请参阅this。也许您的问题与权限问题有关?

标签: php fopen


【解决方案1】:

如果您阅读文档,您会看到

resource fopen ( string $filename , string $mode [, bool $use_include_path = false [, resource $context ]] ) 

在哪里

filename is of the form "scheme://...", it is assumed to be a URL and PHP

我建议你使用以下

fopen('http://192.168.183.28/DIGI_PROG/M10/TEST1/P001.txt','r')

或使用 file_get_contents(确保 allow_url_fopen 设置为 1 后)

【讨论】:

  • UNC 路径不等于 URL。
【解决方案2】:

不要使用fopen()file_get_contents() 函数是将文件内容读入字符串的首选方法。如果您的操作系统支持,它将使用内存映射技术来提高性能。

像这样: file_get_contents('http://192.168.183.28/DIGI_PROG/M10/TEST1/P001.txt');

编辑: 如果要打开共享网络资源上的文件,请使用此(例如,注意路径中没有双斜杠):

file_get_contents('/path/to/mount/path/to/file.txt');

注意:

如果您要打开包含特殊字符(例如空格)的 URI,则需要使用 urlencode() 对 URI 进行编码。

【讨论】:

  • 您建议使用备用网址。 OP 想要一个来自共享网络的文件,但您的 URL 在网络服务器上。
【解决方案3】:

非常基本的尝试应该是:

$filename = '/path/to/foo.txt';

if (file_exists($filename)) 
{
    echo "The file $filename exists";
} 
else 
{
    echo "The file $filename does not exist";
}

如果您得到该文件不存在,则很明显您的路径错误或文件确实不存在,这不应该是这种情况,因为您在文件系统上检查了它。 检查拼写。 我不确定你应该在那里放这么多反斜杠。 你试过 fopen(\ \ 192.168.183...) 吗?

在 Windows 平台上,小心转义文件路径中使用的任何反斜杠,或使用正斜杠。

<?php
$handle = fopen("c:\\folder\\resource.txt", "r");
?>

希望这对找到原因有所帮助 问候 弗拉基米尔

【讨论】:

  • 使用正斜杠可以避免一些转义问题。此外,这个答案并没有解决 OP 的问题。
  • 他应该找到打不开文件的原因吧?所以如果你再读一遍,可能会注意到我建议了两个简单的步骤: - 检查文件是否存在 - 打开文件 那么,你为什么说它不能解决问题?他将受益于在尝试打开文件之前检查文件是否存在,这也将处理潜在的错误。显然,您的评论清楚地指出您应该在发布“使用正斜杠可以避免一些转义问题”之前阅读 php 文档,因为您可以在 php.net 上阅读它php.net/manual/en/function.fopen.php 问候,V
猜你喜欢
  • 1970-01-01
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2016-05-06
相关资源
最近更新 更多