- Difficult to say.
- Understanding file_get_contents in PHP
- Syntax
- How file_get_contents Works
- Benefits of using file_get_contents
- Use Cases for file_get_contents
- Limitations of file_get_contents
- Conclusion
- file_get_contents
- Список параметров
- Возвращаемые значения
- Ошибки
- Примеры
- Список изменений
- Примечания
- Смотрите также
Difficult to say.
It’s unclear what the $parsedown->text() method does, nor do we know what files are under content/ and where they come from.
We cannot know, if this is ‘secure’. Define what you mean by ‘secure’?
What if $parsedown->text() receives FALSE ? What does it do? Something ‘unsecure’?
Who controls what files that are present under content/ ? The user of your site? You?
But if your question is: «Does this code restrict file access to only the files under content/ ?», then I think the answer should be: «Yes.» You check that the beginning is content/ and you prevent going to the parent directory. As far as I can tell that should be enough.
I would prefer a file_exists() check, just so you know there’s something there before you go and process the, non-existent, content. And possibly I would do a check on the file content, if possible.
I would also really like to see the usage of an absolute path here, just to be safe. Something like:
define('THIS_ROOT','/this/is/my/file/root/'); function path_purifier($path) < if ((substr($path,0,8) == 'content/') && (strpos($path,'..') === false)) return THIS_ROOT.$path; else return NULL; >
But again, this all depends on what your code actually does.
You might want to further restrict the characters in the path to those that are valid. To get rid of unwanted stuff.
$path = preg_replace('/[^A-Za-z0-9.\/]/', '', $path);
this is just an example, you might need another regular expression for your files.
You might consider not giving the paths away like this at all. You can store the paths in a database and refer to the entries in the database by an ID.
You can further secure those ID’s by specifying, in the database, which users are allowed to use which paths.
You can encrypt the ID’s themselves so it will be virtually impossible for someone to change them. Your URL would then look something like this:
page.php?id=cVIyWjJwMmFrZG1k
Change anything and you would know about it.
Understanding file_get_contents in PHP
file_get_contents is a function in PHP that is used to read the contents of a file into a string. This function is particularly useful when working with text files and can be used to retrieve the contents of a file from a remote server or a local file system.
Syntax
The syntax for the file_get_contents function is as follows:
file_get_contents( string $filename, bool $use_include_path = false, ?resource $context = null, int $offset = 0, ?int $maxlen = null ): string|fals
- $filename : The path to the file or the URL to be read.
- $use_include_path : (optional) If set to TRUE , the function will search for the file in the include path.
- $context : (optional) A valid context resource created with stream_context_create() .
- $offset : (optional) Specifies where to start reading from in the file. If $offset is negative, the function will start reading from the end of the file.
- $maxlen : (optional) Specifies the maximum number of bytes to read.
How file_get_contents Works
The file_get_contents function takes a file path or URL as its argument and returns the contents of the file as a string. The function reads the entire contents of the file into memory, so it is not recommended to use it on large files.
Benefits of using file_get_contents
- Easy to Use: file_get_contents is a simple function to use and requires only a single line of code to retrieve the contents of a file.
- Speed: file_get_contents is fast and efficient, making it a great choice for reading the contents of small to medium-sized files.
- Versatility: file_get_contents can be used to retrieve the contents of both local and remote files, making it a versatile option for a variety of use cases.
Use Cases for file_get_contents
- Retrieving the contents of a local file: file_get_contents can be used to retrieve the contents of a local file, such as a text file or an HTML file.
- Reading the contents of a remote file: file_get_contents can also be used to retrieve the contents of a remote file, such as a file stored on a web server.
- Processing data from APIs: file_get_contents can be used to retrieve data from APIs, such as weather data or stock market data.
Limitations of file_get_contents
- Memory Usage: file_get_contents reads the entire contents of a file into memory, so it is not recommended to use it on large files.
- Slow Performance: file_get_contents can be slow when reading large files, so it is not the best choice for processing large amounts of data.
Conclusion
file_get_contents is a simple and versatile function in PHP that can be used to retrieve the contents of both local and remote files. While it has some limitations, such as its memory usage and slow performance with large files, it is still a useful tool for many common use cases.
file_get_contents
Данная функция похожа на функцию file() с той только разницей, что file_get_contents() возвращает содержимое файла в строке, начиная с указанного смещения offset и до maxlen байт. В случае неудачи, file_get_contents() вернёт FALSE .
Использование функции file_get_contents() наиболее предпочтительно в случае необходимости получить содержимое файла целиком, поскольку для улучшения производительности функция использует технику отображения файла в память (memory mapping), если она поддерживается вашей операционной системой.
Замечание:
Если вы открываете URI содержащий спецсимволы, такие как пробел, вам нужно закодировать URI при помощи urlencode() .
Список параметров
Замечание:
Начиная с версии PHP 5 можно использовать константу FILE_USE_INCLUDE_PATH для поиска файла в include path.
Корректный ресурс контекста, созданный с помощью функции stream_context_create() . Если в использовании особого контекста нет необходимости, можно пропустить этот параметр передав в него значение NULL .
Смещение, с которого начнется чтение оригинального потока.
Поиск смещения ( offset ) не поддерживается при работе с удаленными файлами. Попытка поиска смещения на нелокальных файлах может работать при небольших смещениях, но этот результат является непредсказуемым, так как он работает на буферизованном потоке.
Максимальный размер читаемых данных. По умолчанию чтение осуществляется пока не будет достигнут конец файла. Учтите, что этот параметр применяется и к потоку с фильтрами.
Возвращаемые значения
Функция возвращает прочтенные данные или FALSE в случае возникновения ошибки.
Эта функция может возвращать как boolean FALSE , так и не-boolean значение, которое приводится к FALSE . За более подробной информацией обратитесь к разделу Булев тип. Используйте оператор === для проверки значения, возвращаемого этой функцией.
Ошибки
Будет сгенерирована ошибка уровня E_WARNING , если параметр filename не удается найти, параметр maxlength меньше нуля или поиск по смещению offset в потоке завершается неудачно.
Примеры
Пример #1 Получить и вывести исходный код домашней страницы вебсайта
Пример #2 Поиск файлов в include_path
// $file = file_get_contents ( ‘./people.txt’ , true );
// > PHP 5
$file = file_get_contents ( ‘./people.txt’ , FILE_USE_INCLUDE_PATH );
?>?php
Пример #3 Чтение секции файла
// Читаем 14 символов, начиная с 21 символа
$section = file_get_contents ( ‘./people.txt’ , NULL , NULL , 20 , 14 );
var_dump ( $section );
?>?php
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Использование потоковых контекстов
// Создаем поток
$opts = array(
‘http’ =>array(
‘method’ => «GET» ,
‘header’ => «Accept-language: en\r\n» .
«Cookie: foo=bar\r\n»
)
);
?php
$context = stream_context_create ( $opts );
// Открываем файл с помощью установленных выше HTTP-заголовков
$file = file_get_contents ( ‘http://www.example.com/’ , false , $context );
?>
Список изменений
Версия | Описание |
---|---|
5.1.0 | Добавлены аргументы offset и maxlen . |
Примечания
Замечание: Эта функция безопасна для обработки данных в двоичной форме.
Для этой функции вы можете использовать URL в качестве имени файла, если была включена опция fopen wrappers. Смотрите более подробную информацию об определении имени файла в описании функции fopen() . Смотрите также список поддерживаемых оберток URL, их возможности, замечания по использованию и список предопределенных констант в Поддерживаемые протоколы и обработчики (wrappers).
При использовании SSL, Microsoft IIS нарушает протокол, закрывая соединение без отправки индикатора close_notify. PHP сообщит об этом как «SSL: Fatal Protocol Error» в тот момент, когда вы достигнете конца данных. Чтобы обойти это, вы должны установить error_reporting на уровень, исключающий E_WARNING. PHP версий 4.3.7 и старше умеет определять, что на стороне сервера находится проблемный IIS при открытии потока с помощью обертки https:// и не выводит предупреждение. Если вы используете fsockopen() для создания ssl:// сокета, вы сами отвечаете за определение и подавление этого предупреждения.
Смотрите также
- file() — Читает содержимое файла и помещает его в массив
- fgets() — Читает строку из файла
- fread() — Бинарно-безопасное чтение файла
- readfile() — Выводит файл
- file_put_contents() — Пишет строку в файл
- stream_get_contents() — Читает оставшуюся часть потока в строку
- stream_context_create() — Создаёт контекст потока
- $http_response_header