is_readable

(PHP 4, PHP 5, PHP 7, PHP 8)

is_readableファイルが存在し、読み込み可能であるかどうかを知る

説明

function is_readable(string $filename): bool

ファイルが存在し、読み込み可能であるかどうかを調べます。

パラメータ

filename

ファイルへのパス。

戻り値

filename で指定したファイルあるいはディレクトリが存在し、 それが読み込み可能であれば true、それ以外の場合に false を返します。

エラー / 例外

失敗したときは E_WARNING が発生します。

例1 is_readable() の例

<?php
$filename
= 'test.txt';
if (
is_readable($filename)) {
echo
'このファイルは読み込み可能です';
} else {
echo
'このファイルは読み込み可能ではありません';
}
?>

注意

PHP は、Web サーバーを実行しているユーザー ID (たいていは 'nobody') でファイルにアクセスすることを覚えておいてください。

注意: この関数の結果は キャッシュされます。詳細は、clearstatcache() を参照してください。

ヒント

PHP 5.0.0 以降、この関数は、 何らかの URL ラッパーと組合せて使用することができます。 どのラッパーが stat() ファミリーをサポートしているかを調べるには サポートするプロトコル/ラッパー を参照してください。

注意:

チェックは、実効ユーザーではなく実ユーザーの UID/GID で行います。

この関数は、ディレクトリに対しても true を返すかもしれません。 ファイルとディレクトリを区別するには is_dir() を使いましょう。

参考

  • is_writable() - ファイルが書き込み可能かどうかを調べる
  • file_exists() - ファイルまたはディレクトリが存在するかどうか調べる
  • fgets() - ファイルポインタから 1 行取得する

add a note

User Contributed Notes 5 notes

up
9
jo at durchholz dot org
20 years ago
DrTebi at yahoo dot com is wrong. is_readable() checks whether you can do file_get_contents() or similar calls, no more, no less. If the location given returns a 500 or 403 error, you can still read() that (you'll simply get the error page), but it's still read()able. Using is_readable to check the validity of a URL is simply the wrong function.
up
1
arikan134 at gmail dot com
10 years ago
is readable recursively. Check all sub directories and files readable
<?php
function is_readable_r($dir) {
    if (is_dir($dir)) {
        if(is_readable($dir)){
            $objects = scandir($dir);
            foreach ($objects as $object) {
                if ($object != "." && $object != "..") {
                    if (!is_readable_r($dir."/".$object)) return false;
                    else continue;
                }
            }    
            return true;    
        }else{
            return false;
        }
        
    }else if(file_exists($dir)){
        return (is_readable($dir));
        
    }
}

?>
up
1
pgl at yoyo dot org
16 years ago
Note that is_readable() will return false for streams, eg, php://stdin.
up
0
anrdaemon at yandex dot ru
5 days ago
Do note that is_readable/is_writable evaluates permissions in an attempt to produce the result.

This WILL fail in certain situations, while the file is actually accessible to the user, but manual evaluation fails to connect the dots.

The only trusted way to detect if a file is readable is to actually open it for reading. The only trusted way to detect if a file is writable is to actually open it for writing. And catche the error in case of failure.
up
0
johninen at gmail dot com
11 months ago
This will return false on urls, even if file_get_contents() reads them. So, only for files.
To Top