当+(加号)符号位于文件名中时,PHP file_get_contents()无效

时间:2015-06-03 06:43:28

标签: php file-get-contents symbols

我有几个文件在其名称中加号,我似乎无法打开它们,因为该函数将其解释为空格。

示例:

File name: Report_Tue-Jun-02-2015-14:11:04-GMT+0200-(W.-Europe-Daylight-Time).html

当我试图打开它时:

Warning: file_get_contents(/cores/Report_Tue-Jun-02-2015-14:11:04-GMT 0200-(W.-Europe-Daylight-Time).html) [function.file-get-contents]: failed to open stream: No such file or directory in .... on line 150

这是我的代码:

$file = $_GET['FILE'];  
$file = str_replace('+', '%2B', $file);
$content = file_get_contents($file);

任何想法/解决方案?

3 个答案:

答案 0 :(得分:1)

以下方法适用于我。

<?

    # File name: Report_Tue-Jun-02-2015-14:11:04-GMT+0200-(W.-Europe-Daylight-Time).html 

    # Method 1.

    $file = 'Report_Tue-Jun-02-2015-14:11:04-GMT+0200-(W.-Europe-Daylight-Time).html';

    $data = file_get_contents($file);

    print($data);

    # Method 2.

    $data = file_get_contents('Report_Tue-Jun-02-2015-14:11:04-GMT+0200-(W.-Europe-Daylight-Time).html');

    print($data);
?>

答案 1 :(得分:1)

首先,文件不应包含:sign。
然后下面的代码对我来说很好。

$content = file_get_contents('Report_Tue-Jun-02-2015-141104-GMT+0200-(W.-Europe-Daylight-Time).html');

echo $content;

如果不起作用,请使用:

$link = urlencode($url);
$content = file_get_contents($link);
echo $content;

我每次都认为它的工作。

答案 2 :(得分:0)

RFC3986中提供了有关如何编写有效URI的信息。首先,您需要注意正确表示所有特殊字符。例如空格到加号,标志处的广告必须是URL编码。

还需要删除开头和结尾的多余空格。对整个URL使用函数urlencode()将生成无效的URL。保留URL也不正确,因为与浏览器相比,file_get_contents()函数不执行URL规范化。在您的示例中,您需要使用%2B替换加号:“

 $string = str_replace('+', '%2B', $string);

这就是例如。 encodeURIComponent()在JavaScript中有效。不幸的是,这不是urlencode在PHP中的作用(rawurlencode更安全)。另请查看link

我希望这对你有用。