stream — есть ли гарантированный файловый ресурс на PHP?

Есть ли какой-нибудь URL / поток, который fopen будет успешно открываться на большинстве установок PHP? /dev/null недоступен или не открыт в некоторых системах. Что-то вроде php://temp должна быть довольно безопасная ставка, верно?

Приложение для этого кода, которое гарантирует файловый ресурс, а не смешанный тип файла bool|resource у вас есть с fopen:

/**
* @return resource
*/
function openFileWithResourceGuarantee() {
$fh = @fopen('/write/protected/location.txt', 'w');
if ( $fh === false ) {
error_log('Could not open /write/protected/location.txt');
$fh = fopen('php://temp');
}
return $fh;
}

В PHP 7 со строгими типами вышеупомянутая функция должна гарантировать ресурс и избегать bools. я знаю это ресурсы не являются официальными типами, но все же хочу быть максимально безопасным для типов.

2

Решение

php://memory должен быть общедоступным.

1

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

Если вам нужен поток для записи ошибок, почему вы не пишете в php://stderr?

Пример из документов:

При входе в Apache на Windows, как error_log, а также
В результате trigger_error возникает ошибка apache на передней панели
сообщение. Это плохо, если все, что вы хотите сделать, это записать информацию. тем не мение
Вы можете просто войти в stderr, однако вам придется делать все сообщения
монтаж:

LogToApache($Message) {
$stderr = fopen('php://stderr', 'w');
fwrite($stderr,$Message);
fclose($stderr);
}

Замечания: php://stderr иногда так же, как php://stdout, но не всегда.

Для потоков см .: http://php.net/manual/en/wrappers.php.php

Что-то вроде php://temp должна быть довольно безопасная ставка, верно?

Как уже говорил @weirdan php://memory это, вероятно, безопаснее, так как даже не нужно создавать какой-либо файл. Доступ к памяти ДОЛЖЕН быть возможен. Из документов:

php://memory а также php://temp потоки чтения-записи, которые позволяют
временные данные для хранения в файловой оболочке. Единственный
Разница между ними заключается в том, что php://memory всегда будет хранить его
данные в памяти, тогда как php://temp будет использовать временный файл, как только
объем хранимых данных достигает предопределенного предела (по умолчанию 2 МБ).
Расположение этого временного файла определяется так же, как
sys_get_temp_dir() функция.

Не уверен, что это полностью отвечает на ваш вопрос, но ведет ли вас в правильном направлении?

0

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