私はもしかすると質問があります。私は$source
という名前の変数を持っており、このはは、この$source
変数は$ _GETと$ _POSTを経由して、ユーザの入力が含まれています今ファイルがローカルに存在するかどうかを確認する文字列を確認する
たとえば./uploads/2012/some-document.pdf
ため、ファイルへの相対パスを含める必要があります。私は人々がURLを入力するのを望んでおらず、ファイルが存在する場合にのみ何かしたいですローカルサーバー上の。
私の質問は、ファイルがローカルサーバーにのみ存在するかどうかを確認する最も良い方法は何ですか?
この
は、私がこれまで持っているものです:1)file_exists
は、サーバーの構成に応じて、trueを返すことがあり、私は、文字列の最初の数charatcersかどうかを確認するためにstriposと一緒にこれを使用することができますHTTPはある://そうのように://は、http://やftp://だけに
if(file_exists($source) && stripos($source,'http://')!==0) {
echo 'File exists on local';
}
しかし、欠点は、私がHTTPSなどのすべての異なるURLのタイプを指定する必要があるだろうだろう安全です。
2)私はrealpath
を使用してファイルの絶対パスを取得します。見つからない場合はfalseを返します。これは非常にしっかりしているようですが、100%ではないようです。
preg_replace
を使用して文字列のすべてのURLのコメントを削除してから、単にfile_exists
を使用してください。これはおそらく最も安全ですが、最も集中する可能性が高く、このメソッドを使用しないことをお勧めします。
これはparse_urlを使用するための優れた提案です。私はそれとfile_existsが良いと思います。ありがとう –
Windowsでは、リモートファイルと組み合わせてfile_exists()とis_file()を使用すると問題が発生する可能性があります。それはWindowsのようなものをダウンロードしているようだ。 parse_url()を使い、空のホストをチェックしてください。 – redaxmedia