2016-10-18 5 views
0

私はこれにより多くの夜の睡眠を失いました。どんな助力も非常に感謝しています。別のコンピュータで実行しても、同じブラウザ、同じスクリプト、同じサーバ、同じアクセス許可でPHPの検証が失敗する

ユーザーがフォームを使用してファイルをアップロードした後に、ファイル拡張子がのであることを確認する、非常に簡単な検証が.phpファイルにあります。私は、フォームのページにアクセスし、ファイルを送信すると

$allowed = array('png','jpg','rar','zip'); 
    $filename = $_FILES['userfile']['name']; 
    $ext = pathinfo($filename, PATHINFO_EXTENSION); 
    if(!in_array($ext,$allowed)) 
    { 
     $errorMessage .= 'File is not of type png, jpg, rar or zip'; 
     $validData = false; 
    } 

は、フォームは、それが必要として動作します。正しい拡張子を持つファイルをアップロードしないとエラーが発生し、それ以外の場合は成功します。

しかし、他の誰かが別のコンピュータからフォームにファイルを送信すると、常にエラーがスローされます。私は何が起こっているのか理解できません。

質問タイトルで述べたように、サーバー、ブラウザ、スクリプトはすべて同じです。 フォームの残りの部分(名前、教員、Facebookのリンクなど)が正しく転送され、エラーはありません!

注:環境は有効です。

+2

エラーメッセージを説明できますか?どのファイルがアップロードされるので、エラーが発生していますか?ローカルまたはライブ環境の – KinjalMistry

+1

ローカルチェックの場合は、PATHINFO_EXTENSION(acceptpathinfoがApacheでオン)が他のコンピュータにインストールされています。 http://httpd.apache.org/docs/2.2/mod/core.html#acceptpathinfo –

+0

@KinjalMistry任意の種類のファイル。それがpng、jpg、rar、zipの場合、検証はかなり簡単ですが、エラーを返します。今の環境は生きているので、ユーザーからの明示的なエラーは得られません。私は別のコンピュータを使用し、より詳細なものを投げるでしょう。 – romaniucradu

答えて

2

使用これを試してみてください ファイルの拡張子を取得するために爆発:

$name= $_FILES['file']['make']; 
$ext = explode('.',$name); 
$fileExt= end($ext); 

$fileExtは、このジョブは関係なく成し遂げるべきで許さ拡張配列に

if (in_array($fileExt, $allowed)) 

であれば今、あなたは確認することができます機械

関連する問題