<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 前のものは記事の内容とは何の関係もありませんPHPコードの例</span></span><span>
</span><span><span class="hljs-variable">$greeting</span></span><span> = </span><span><span class="hljs-string">"Hello, world!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$greeting</span></span><span>;
</span><span><span class="hljs-comment">// --------------------------</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
</span><span><span class="hljs-comment"># いつis_readable関数の返品false時間,通常、理由は何ですか?この状況に正しく対処する方法?</span></span><span>
存在するPHP真ん中,`</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>()`関数は、指定されたファイルが読み取り可能かどうかを確認するために使用されます。その返品値はブールタイプです:如果文件存存在する且PHPこのプロセスには、ファイルを読み取る許可があります,その後、返します `</span><span><span class="hljs-literal">true</span></span><span>`;否その後、返します `</span><span><span class="hljs-literal">false</span></span><span>`。いつ你遇到`</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>()`戻る`</span><span><span class="hljs-literal">false</span></span><span>`時間,通常、次の理由が引き起こされる場合があります:
</span><span><span class="hljs-comment">## 1. 文件不存存在する</span></span><span>
これが最も一般的な理由の1つです。如果文件路径错误或文件根本不存存在する,`</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>()`自然会戻る `</span><span><span class="hljs-literal">false</span></span><span>`。解決策は、ファイルパスが正しいことを確認することです,并且文件确实存存在する于服务器上。利用可能`</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>()`函数先做一次存存在する性检查:
```php
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">file_exists</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件不存存在する: <span class="hljs-subst">$filePath</span></span></span><span>";
}
</span></span>
ファイルが存在していても、phpプロセス( www-dataやapacheなど)のユーザーに読み取り権限がない場合、 is_readable()がfalseを返します。 Linux Systemsでは、 LS -Lを使用してファイル権限を表示し、 CHMODを使用してアクセス許可を変更できます。例えば:
<span><span><span class="hljs-built_in">chmod</span></span><span> 644 ファイル名
</span></span>
通常、Webサーバーは777にファイル権限を設定することを推奨しないことに注意してください。これはセキュリティリスクをもたらすためです。通常、644(他のユーザーが読み取り可能なファイル所有者が読み取り可能で読み取り可能)は、安全で十分な許可設定です。
PHPのパスは、以下を含む問題を起こしやすいことがあります。
相対パスは現在の作業ディレクトリと矛盾しています
ファイル名のケースの問題(Linuxシステムで敏感なケース)
ディレクトリまたはシンボリックリンクの許可の問題
解決策:絶対パスを使用するか、 __dir__を介して現在のスクリプトディレクトリを取得してみてください。
<span><span><span class="hljs-variable">$filePath</span></span><span> = </span><span><span class="hljs-keyword">__DIR__</span></span><span> . </span><span><span class="hljs-string">'/data/myfile.txt'</span></span><span>;
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"ファイルを読み取れません: <span class="hljs-subst">$filePath</span></span></span><span>";
}
</span></span>
まれに、 is_readable()は、ファイルが他のプロセスによってロックまたは占有されている場合にfalseを返す場合があります。ロックをリリースするか、後で再試行することができます。
処理するときは、次の原則に従う必要があります。
ユーザーの優先リマインダーまたはロギング<br> ファイルが読めないときにプログラムを直接クラッシュさせないでください。ログを記録して、トラブルシューティングを容易にすることができます。
<span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-title function_ invoke__">is_readable</span></span><span>(</span><span><span class="hljs-variable">$filePath</span></span><span>)) {
</span><span><span class="hljs-title function_ invoke__">error_log</span></span><span>(</span><span><span class="hljs-string">"ファイルは読み取りできません: <span class="hljs-subst">$filePath</span></span></span><span>");
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"文件暂時間无法读取,後でもう一度やり直してください。"</span></span><span>;
}
</span></span>
代替案を修正または提供してみてください
ファイルが存在するかどうかを確認してください。存在しない場合は、ユーザーにアップロードするように作成または思い出させることができます。
制御可能な場合、許可を確認することができます
デフォルトのコンテンツまたはバックアップデータソースを提供します
安全性<br> ファイルの権限が不十分であっても、自由にアクセス許可を安全でないレベルまで増やさないでください。 Webアプリケーションのセキュリティを確保する必要があります。
要するに、 is_readable()は、通常、ファイルが存在しないことによって引き起こされるfalseを返し、許可不足、またはパスエラーを返します。それに対処する正しい方法は次のとおりです。最初に原因を確認し、次にユーザーを状況に応じてログにし、ユーザーに促したり、安全に修理したりします。
<span><span><span class="hljs-comment">// 終わりは記事の内容とは何の関係もありませんPHPコードの例</span></span><span>
</span><span><span class="hljs-variable">$farewell</span></span><span> = </span><span><span class="hljs-string">"Goodbye!"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$farewell</span></span><span>;
</span><span><span class="hljs-meta">?></span></span><span>
</span></span>