2012-04-22 9 views
1

私はこのコードを以下のようにしています。問題は、ファイルをアップロードしていないことと、下部のコールバックJavaScript関数が結果を表示していないことです。今度はif isset($ _POST [fileImage '])...コードと$_SESSION['fileImage']['name'] = $_FILES['fileImage']['name'];に入力する前に、ファイルは完全にアップロードされました。しかし、これらの2つのコードでは、アップロードが中断されました。以下のisset()関数は正しく配置されていますか?

私は上記のコードが間違った場所に配置されているということが問題だと思います。下のコードをアップロードのために適切な場所に正しく配置するには、どのようにして再度作業を開始できますか?以下は

は、ファイルをアップロードすると仮定されたコードですが、失敗します。

<?php 

    $result = 0; 

     if (isset($_POST['fileImage']) && ((($_FILES["fileImage"]["type"] == "image/gif") 
    || ($_FILES["fileImage"]["type"] == "image/jpeg") 
    || ($_FILES["fileImage"]["type"] == "image/pjpeg") 
    || ($_FILES["fileImage"]["type"] == "image/jpg") 
    || ($_FILES["fileImage"]["type"] == "image/png") 
    || ($_FILES["fileImage"]["type"] == "image/tif"))){ 

    if(file_exists("ImageFiles/".$_FILES['fileImage']['name'])) { 

     $parts = explode(".",$_FILES['fileImage']['name']); 
     $ext = array_pop($parts); 
     $base = implode(".",$parts); 
     $n = 2; 

     while(file_exists("ImageFiles/".$base."_".$n.".".$ext)) $n++; 
     $_FILES['fileImage']['name'] = $base."_".$n.".".$ext; 

     move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
     "ImageFiles/" . $_FILES["fileImage"]["name"]); 
     $result = 1; 

    } 
     else 
      { 
      move_uploaded_file($_FILES["fileImage"]["tmp_name"], 
      "ImageFiles/" . $_FILES["fileImage"]["name"]); 
      $result = 1; 

      } 

      ?> 

<script language="javascript" type="text/javascript"> 
window.top.stopImageUpload(<?php echo $result;?>); 
</script> 

      <?php 

    } 

     $_SESSION['fileImage']['name'] = $_FILES['fileImage']['name']; 

    ?> 
+0

$ _FILES ["file"] ["type"]はファイルの種類を判断するのに安全ではありません。この情報はブラウザによって提供されます。追加のチェックを展開して、画像であることを確認したり、ファイルが実行されるフォルダを保護したりする必要があります。 – bardiir

+2

あなたのフォームを見ることなく確実に言うことはできませんが、私の推測では '$ _POST ['fileImage']'は設定されていません。私は 'isset($ _ FILES ['fileimage'])と' $ _FILES ['fileimage'] ['error'] == 0'をチェックします。ファイル入力フィールド 'fileimage'があれば、' $ _POST ['fileimage'] 'は入力されません。 '$ _FILES'のみです。 – drew010

答えて

0

$_FILES["fileImage"]$_POST['fileImage']の両方を使用していることがわかりましたが、それが正しいかどうかわかりません。

あなたにも書かれている方法は、簡単にエラーを識別するのに十分な、それはきれいになりません..あなたは

<?php 

$result = 0; 
$errors = array(); 
$dirImage = "ImageFiles/"; 

$allowedTypes = array (
     "image/jpeg", 
     "image/gif", 
     "image/pjpeg", 
     "image/jpg", 
     "image/png", 
     "image/tif" 
); 

if (isset ($_FILES ['fileImage']) && $_FILES ["fileImage"] ["error"] == UPLOAD_ERR_OK) { 

    $fileName = $_FILES ['fileImage'] ['name']; 
    $fileSize = $_FILES ['fileImage'] ['size']; 
    $fileTemp = $_FILES ['fileImage'] ['tmp_name']; 
    $fileType = $_FILES ['fileImage'] ['type']; 

    $fileExt = pathinfo ($fileName, PATHINFO_EXTENSION); 
    $fileExt = strtolower ($fileExt); 

    if (empty ($fileName)) 
     continue; 

    if (! in_array ($fileType, $allowedTypes)) { 
     $errors [] = "File Type is not accepted"; 

    } 

    if(!is_writable($dirImage)) 
    { 
     $errors [] = "File Destination not writeable"; 
    } 


    $fileDst = $dirImage . DIRECTORY_SEPARATOR . $fileName; 
    $filePrifix = basename ($fileName, "." . $fileExt); 
    $i = 0; 
    while (file_exists ($fileDst)) { 
     $i ++; 
     $fileDst = $dirImage . DIRECTORY_SEPARATOR . $filePrifix . "_" . $i . "." . $fileExt; 

    } 
    // Move the file 

    if (count ($errors) == 0) { 
     if (move_uploaded_file ($fileTemp, $fileDst)) { 
      $result = 1; 
     } 
    } 

} 

$_SESSION ['fileImage'] ['name'] = $_FILES ['fileImage'] ['name']; 
?> 

を試してみてください。この

を使用することができますエラーが$errors変数に格納されていることに注意して何してくださいあなたのための助言はjsonに変換してくださいJavaScriptコード

0

は、アップロードを処理するための機能を使用することを検討してください:

function handleImageUpload() 
{ 
    // was a file uploaded? 
    if (!isset($_FILES['fileImage'])) { 
     return; 
    } 
    if (!isImage($_FILES['fileImage'])) { 
     // consider throwing an exception here 
     return; 
    } 
    $savepath = getFileSavePath($_FILES['fileImage'], 'ImageFiles/') 
    // handle upload 
    // ... 
} 

function isImage($imagepath) 
{ 
    // return boolean 
} 

function getFileSavePath($uploadpath, $destinationdirectory) 
{ 
    // return path to save upload without overwriting any existing file 
} 

は、ファイルに関する情報を取得するためにpathinfo()の使用を検討してください。 http://www.php.net/manual/en/function.pathinfo.php

関連する問題