PHP Dosya Yükle, move_uploaded_files önce tmp / kaybolan dosyaları

13 Cevap php

Herhalde düz php.net / move_upload_files fonksiyon sayfanın kaldırdı çok temel bir yükleme komut dosyası var.

Bu tmp klasöründe tmp dosyasını bulamıyorum çünkü move_uploaded_file() başarısız. Ama oraya konduğunu, ancak move_upload_file() benim komut onunla başa çıkabilirim önce kaldırılır BİLİYOR. Ben bir büyük dosya sunucusuna nakledilen zaman ben orada bir dosyayı görebilirsiniz çünkü oraya konduğunu biliyorum.

Ayrıca $_FILES Ben sadece yüklediğiniz dosya için doğru bilgileri içerir.

Herkes bunu işlemek için bir şans var önce geçici dosya / tmp kaldırılıyor neden herhangi bir fikrin var mıydı?

İşte ben kullanıyorum temel kodudur.

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file))
{
    $result['error'] = 'false';
    $result['file_loc'] = $upload_file;
}
else
{
    $result['error'] = 'true';
}

print_r($_FILES) çıkışı gibi görünüyor

[userfile] => Array
(
    [name] => switchsolo.png
    [type] => image/png
    [tmp_name] => /tmp/phpIyKRl5
    [error] => 0
    [size] => 6690
)

Ama / tmp/phpIyKRl5 sadece orada değil.

13 Cevap

1) yüklemeye çalıştığınız dosyanın boyutu daha yüksek değer tutan post_max_size ve upload_max_filesize mı?

2) yükleme komut değişkeni verir max_execution_time değerinden daha çalıştırmak için uzun zaman alıyor mu?

3) Ben memory_limit değişken verir gibi yükleme komut kadar bellek tüketmek değildir varsayalım. Istemci sunucuya dosya yüklerken zaman bunu yaparken, daha sonra sunucu muhtemelen belleğe bazı düzenliyor. Bu şekilde php.ini içinde memory_limit değişkenin limiti etkiler eğer ben emin değilim.

Bu değişkenler) (php.ini ve / veya. Htaccess veya ini_set ile değiştirilebilir.

Umut olur.

Aynı zamanda size hedef klasör mevcut değil veya yazma izniniz yok olabilir.

Betiğin tamamlandıktan sonra dosya kaldırılır. Eğer komut dosyasını çalıştırın ve sonra / tmp / klasörünü kontrol ederseniz, dosya ne olursa olsun orada olmayacak.

I was trying out http://www.w3schools.com/php/php_file_upload.asp And I stumbled across the same bug.

Benim durumumda, a ekleyerek ". /" $ Hedef sorunu çözüldü önce.

bool move_uploaded_file ( string $filename , string $destination )

Ben sadece yanı sıra bu sorunu yiyordum, bir çözüm için bu web sitesinde rastladım - onu tho alamadım ;)

I print_r($_FILES) bakarken doğru bilgi alıyorum ama yürütmek mümkün oldu move_uploaded_file ...

O (benim yanlış), aksi takdirde çalışmaz doğru olduğundan emin olun - Ben move_uploaded_file fonksiyonu $upload_file yol niteliğini kontrol ederek sorunu çözüldü.

Ayrıca, geçici konuma dosya otomatik olarak kaldırılmış olur, ben PHP çalışır yol olduğunu düşünüyorum.

Ben bu yardımcı umuyoruz.

Sizin form böyle bir etiketi kullanmanız gerekir:

<form method="post" enctype="multipart/form-data" action="...">

multiple/form-data enctype olarak kullanın.

Eğer dosya aslında / tmp oluşturulan% 100 emin misin? Eğer yazma izni yoksa dosya alışkanlık / tmp yazılır (veya kullanıcı olarak komut dosyası çalışır) ama (ben tahmin ediyorum) o aslında orada zaman yükleme bittikten olmasa sen yükleme sırasında görürsünüz.

Edit: $ _FILES ['file'] ['error'] - Değer: 7; Dosyayı diske yazma başarısız. PHP 5.1.0 'da tanıtıldı. Yani PHP-sürümünü kontrol. Aşağıda ise diske 5.1 yazma problem olabilir.

Ben bu sorunu kendim yaşadım. Benim durumumda php yanlış tmp klasörüne yüklüyordu. Bunun yerine (plesk üzerinde bir sanal konak olarak) etki tmp klasörünü kullanarak düz OS geçici klasöre yüklüyordu.

Geçici klasörlerin ayarlarını kontrol edin

Apache (ACL değiştirmeyi unutmayın!) Hedef dizine erişimi olmadığında ileride bu da olabilir.

Ben 'tmp_name' it '/ private / var / tmp /' saklanan ediliyor ama dosya orada yok olacağını söyleyebilirim aynı problem vardı.

I had to add "E" to my "variables order" in php.ini ; variables_order Default Value: "EGPCS"

Umarım bu yardımcı olur.

Move_uploaded_file () fonksiyonu önce hakkı yapmak için basit bir test:

if (!file_exists("upload")) {
  if (mkdir("upload")) {
    echo "Upload directory created!";
  }
  else {
    die( "Invalid upload directory!" );
  }
}
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);

Lütfen $ upload_file dikkatli olun. Bu eksikliği olabilir bir "/" dosya size zincirleme klasör yolunu ve adını yükledi.

Eğer yuvarlak move_uploaded_file() yanlış şekilde dönüş değerini kullanıyor:

if(move_uploaded_file($_FILES['userfile']['tmp_name'], $upload_file))
{
    $result['error'] = 'true';
}
else
{
    $result['error'] = 'false';
    $result['file_loc'] = $upload_file;
}