Ben bu kırık php yükleme komut dosyası var

4 Cevap php

Ben bir formdan bir imaj ve içerik yüklemek için bu komut dosyası var, bu bir projede çalışıyor ama diğeri değil. Ben hata ayıklamak çalışıyorum iyi bir kaç saat geçirdim, Birisi ben sahip olabilir sorunu işaret olabilir umuyorum. Yorumlar vardır Nerede hata ayıklama denedim nerede. I got ilk hata son yorumun başında "echo geçersiz dosya" oldu. Bu özel alanlar yükleme adı ve ben formdan kapma olması gerekiyordu yaşıyorum tip I hata oluştuğu yerdir düşünüyorum, yankılandı varlık değildir, ama oldukça bulmak için görünmüyor olabilir dışarı yorumladı. Teşekkürler.

    <?php
include("../includes/connect.php");
/*
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 2000000))
  {
    */
  if ($_FILES["file"]["error"] > 0) 
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {
    echo "Upload: " . $_FILES["file"]["name"] . "<br />";
    echo "Type: " . $_FILES["file"]["type"] . "<br />";
    echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
    echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";

        /* GRAB FORM DATA */
    $title = $_POST['title'];
    $date = $_POST['date'];
    $content = $_POST['content'];
    $imageName1 = $_FILES["file"]["name"];

    echo $title;
    echo "<br/>";
    echo $date;
    echo "<br/>";
    echo $content;
    echo "<br/>";
    echo $imageName1;

    $sql = "INSERT INTO blog (title,date,content,image)VALUES(
    \"$title\",
    \"$date\",
    \"$content\",
    \"$imageName1\"
    )";

    $results = mysql_query($sql)or die(mysql_error());

    echo "<br/>";


    if (file_exists("../images/blog/" . $_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],
      "../images/blog/" . $_FILES["file"]["name"]);
      echo "Stored in: " . "../images/blog/" . $_FILES["file"]["name"];
      }
    }

  /*
  }
else
  {
  echo "Invalid file" . "<br/>";
  echo "Type: " . $_FILES["file"]["type"] . "<br />";
  }
  */

  //lets create a thumbnail of this uploaded image.
  /*
    $fileName = $_FILES["file"]["name"];
    createThumb($fileName,310,"../images/blog/thumbs/");
    function createThumb($thisFileName, $thisThumbWidth, $thisThumbDest){
    $thisOriginalFilePath = "../images/blog/". $thisFileName;
    list($width, $height) = getimagesize($thisOriginalFilePath);
    $imgRatio =$width/$height;
    $thisThumbHeight = $thisThumbWidth/$imgRatio;
    $thumb = imagecreatetruecolor($thisThumbWidth,$thisThumbHeight);
    $source = imagecreatefromjpeg($thisOriginalFilePath);
    imagecopyresampled($thumb, $source, 0, 0, 0, 0, $thisThumbWidth,$thisThumbHeight, $width, $height);
    $newFileName = $thisThumbDest.$thisFileName;
    imagejpeg($thumb,$newFileName, 80);
    echo "<p><img src=\"$newFileName\" /></p>";

    //header("location: http://www.google.ca");

    }

    */





?>

4 Cevap

Burada komut ile bazı sorunlar var:

  1. $ _FILES Dizisindeki 'error' değeri sadece bir boolean değil, bir yükleme başarılı olmadığını size söyleyecektir, ya da neden başarısız oldu. Hata kodları tanımlanır here.

  2. 'Tip' değeri uzak istemci tarafından sağlanır. Bu web sunucusu veya PHP tarafından belirlenir değil. Gibi, o değere göre mime-tipi doğrulama yapıyor büyük bir delik: bu ürünle türü değeri oluşturmak için önemsiz bulunuyor. En gerçek mim türünü belirlemek için, fileinfo gibi, bir sunucu tarafı yöntemini kullanın.

  3. Sen körü körüne SQL enjeksiyon saldırıları için açık geniş bırakır ekleme sorgu içine form verilerini eklemek. En azından sorgu oluşturma önce mysql_real_escape_string() aracılığıyla verileri aktarmak, ya da daha iyisi, kullanmak PDO ve parametreli sorgular

  4. Sen özgün istemci tarafından sağlanan isim ile dosyaları depolamak. Eğer dosya ismi zaten kullanılıyor, / upload çarpışmaları önleyerek yazılmadan, ancak istemci işletim sistemi / dosya sistemi ince dosyasına neden olabilir sunucunun OS / FS olmadığını dosya karakterleri, olanak durum da var "En azından kontrol "hata veya geçersiz karakterler filtre ya da başka bir şey için tercüme edilmiştir, çünkü tamamen farklı dosyaların üzerine kayboldu. Eğer yükleme hakkında bilgi saklamak için bir veritabanı kullanıyorsanız bu yana, o tablodaki orijinal dosya depolamak ve dosya adı olarak tablonun birincil anahtarı (bir auto_increment int, değil mi?) Kullanabilirsiniz.

  5. Bir sorun değil, ama verimlilik açısından, getimagesize kullanmaya gerek sizin başparmak oluşturma işlevi () var. GD imagesx() ve imagesy() hangi bir GD görüntü kolundan piksel boyutunu almak vardır. getimagesize () GD bağımsızdır, bu nedenle açılış ve iki kaynak görüntüyü ayrıştırma ediyoruz. Yine, bu gerçekten bir sorun değil, ama yoğun bir sitede, sadece bir kez resmi açılış iyi bir cpu zaman ve bellek kullanımı tasarruf olabilir.

Belki sizin HTML hayır <input type="file" name="file" id="file" value=""/> HTML form enctype="multipart/form-data" method="post" ekleyebilir veya unuttum.

Hata html formu dosyasında oldu, ben yöntemi yanında bir isim = "bir şeyler" eklemişti = "post" ve enctype = "multi / form-data" Açıkçası bu sevdim değildi. Teşekkürler bana doğru yönde işaret için RC. Ben bunu neden pek emin değilim.

Herhangi bir yükleme sınıfı gibi bir şey kullanmayı deneyin: