PHP dosya yükleme

5 Cevap php

Ben MySQL veritabanı içine bir ikili forma onları kurtarmak için php kullanarak benim sunucuya dosya yüklemek için çalışıyorum ama işe alınamıyor, burada ben kullanıyorum komut, ben o "$ HTTP_POST_FILES ile ilgisi olduğuna inanıyorum "Ben bu dışarı alırken, çünkü" && $ _FILES [''] ['size']> 0 "komut dosyası çalışmaya başlıyor ama sonra bu kullanım altındaki değişkenler" $ _FILES "tanımlanmış değildir.

if(isset($_POST['upload']) && $_FILES['userfile']['size'] >  0) {
$fileName = $_FILES['userfile']['name'];
$tmpName  = $_FILES['userfile']['tmp_name'];
$fileSize = $_FILES['userfile']['size'];
$fileType = $_FILES['userfile']['type'];

$fp      = fopen($tmpName, 'r');
$content = fread($fp, filesize($tmpName));
$content = addslashes($content);
fclose($fp);

if(!get_magic_quotes_gpc())
{
    $fileName = addslashes($fileName);
}

db_connect();
db_select();

$query = "INSERT INTO upload (name, size, type, content ) ".
"VALUES ('$fileName', '$fileSize', '$fileType', '$content')";

mysql_query($query) or die('Error, query failed');
db_disconnect();

echo "<br>File $fileName uploaded<br>";
}

5 Cevap

Bu 2 kat işlem, sunucu üzerinde ilk yükleme kendisi ve sonra değiştirmedir. İlk doğrulama emin dosya bile yüklendiği yapmak olacaktır. Bunun için satırından sonra kullanabilirsiniz

$fileName = $_FILES['userfile']['name'];

Kullanın:

if(is_uploaded_file($fileName)) {
  // Here goes all the file manipulation/storage/etc
} else {
  echo 'Error: File could not be uploaded.';
}

Dosya aslında yüklendiği takdirde kullanan ve belki yeniden yazılan çalışın. $ _FILES Içeriği var diye ille dosya sunucusuna yüklendiği anlamına gelmez.

Sen daha iyi yükleme başarılı olup olmadığını kontrol etmek için file upload status kullanmalısınız.

Ve MySQL sorguları için addslashes işlevini kullanmayın. mysql_real_escape_string kullanmak yerine.

Eğer bir form ile dosya upload ise, "formu" etiketi 'enctype = "multipart / form-data"' a var mı?

Ben "dosya" adlı yayınlanmıştır ediliyor alanınızı varsayıyorum?

Ayrıca, bu soruya doğrudan ilgili değildir, ama genellikle oldukça MySQL daha dosya sistemindeki dosyaları depolamak için daha iyi bir uygulama olarak kabul edilir. Veritabanları değil iken Dosyasistemleri, ikili veri bloklarını saklamak için tasarlanmıştır.

Ben senin input name upload olduğu örnekten varsayalım. <input type="file" /> PHP sonuçları $_POST sıralanır değil, içinde $_FILES. Dokümantasyon kullanımları $_FILES['userfile'] onların örnek alan olarak, ancak giriş <input type="file" name="upload" />, sadece kullanmalısınız olarak bildirilirse $_FILES['upload'].