もしよろしければ質問があります。名前付きの変数が$source
あり、これにはファイルへの相対パスが含まれている必要があります。たとえば、./uploads/2012/some-document.pdf
これで、この$source
変数には $_GET および $_POST を介したユーザー入力が含まれます。人々に URL を入力させたくないので、ファイルがローカル サーバーにのみ存在する場合にのみ何かを実行したいと考えています。
私の質問は、ファイルがローカル サーバーにのみ存在するかどうかを確認する最善の方法は何ですか?
これは私がこれまでに得たものです:
1)file_exists
サーバーの構成によっては true を返す場合があるため、これを stripos と一緒に使用して、文字列の最初の数文字が http:// であるかどうかを確認できます。
if( file_exists($source) && stripos($source,'http://')!==0 ) {
echo 'File exists on local';
}
ただし、安全のために、https://、http://、ftp:// などのさまざまな URL タイプをすべて指定する必要があるという欠点があります。
2)realpath
ファイルの絶対パスを取得するために使用しますが、見つからない場合は false を返します。これはかなりしっかりしているように見えますが、100% ではありません。これが最適なアプリケーションです。
3) を使用preg_replace
して、最初に文字列内のすべての URL 言及を削除してから、単純に を使用しますfile_exists
。これはおそらく最も安全ですが、最も集中的である可能性が最も高いため、この方法は使用しないことをお勧めします.