PHP file_get_contents () не работает, когда знак + (плюс) находится в имени файла

У меня есть несколько файлов, в имени которых есть знак плюс, и я не могу открыть их, так как функция интерпретирует их как пробел.

Пример:

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

Решение

Следующие методы работают хорошо для меня.

<?

# 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

Другие решения

Прежде всего, файл не должен содержать: знак.
Тогда приведенный ниже код работает нормально для меня.

$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;

Я думаю, что его работа каждый раз.

1

Информация о том, как написать действительный URI, доступна в RFC3986. Во-первых, вам нужно позаботиться о том, чтобы все специальные символы были представлены правильно. например пробелы в знаках плюса, а реклама в знаке должна быть закодирована URL.

Также необходимо удалить лишние пробелы в начале и конце. Используя функцию urlencode() для всего URL, будет генерировать недействительный URL. Оставлять URL-адрес в том виде, в котором он есть, также неверно, поскольку в отличие от браузеров функция file_get_contents () не выполняет нормализацию URL-адресов. В вашем примере вам нужно заменить знак плюс на% 2B: `

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

Вот что например. encodeURIComponent() делает в JavaScript. К сожалению это не то, что urlencode делает в PHP (rawurlencode безопаснее). проверьте также ссылка на сайт

Я надеюсь, что это будет работать для вас.

0
По вопросам рекламы [email protected]