2011-05-05 14 views
7

Sunucum için birden fazla dosya yüklemek için plupload kullanıyorum. Bunu kullanarak, 'url:' upload.php 'parametresi vardır. upload.php, dosyaları alındıklarında yakalar ve yığınlanırsa bunları yeniden birleştirebilir. Tam dosya alındıktan sonra, orijinal sayfaya geri bir cevap gönderir ve yeşil bir onay kutusu simgesi görüntülenir.Neden php rename() dosyama zarar veriyor?

Yüklediğim fotoğrafları değiştirmek için tüm ana kodlardan sonra bu sayfaya bir kod ekledim. Planım, tam boy resmimin lg, med ve küçük üç kopyasını oluşturmak. Bu kısmı çalıştım, ancak daha sonra ilk dosyama adlandırma planımla eşleşmeye karar verdim.

Artık bozuk bir dosya aldım ve böylece üç küçük resmim de bozuk.

//get the original file info 
$filepath = $_SERVER['DOCUMENT_ROOT'].'/uploads/'; 
$filepathinfo = pathinfo($filepath.$fileName);//fileName is used previously in the file 

//rename original file to a unique name 
$finding_id = 'xyz'; 
$file_name_new = uniqid($client_id . '-' . $finding_id . '-', true); //doesn't include extension 
//rename($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 
//copy($filepath.$fileName, $filepath.$file_name_new.'.'.$ext); 

Olduğu gibi benim bir dosya almak, ya da ben yükleme şeklinizi hiç birçok bayt boyutu orijinal tam olarak eşleşir ve ad (bazı karakterlerin çıkarılması hariç) aynı kalır.

Yalnızca yeniden adlandırma işlevinden rahatsızlık duyarsam, aslında iki dosya alırım. Bayt boyutları orijinal fotoğrafı toplamalı. Büyük dosya, alt kısımda gri bir bölümle görüntülenir. Küçük dosya hiç görüntülenmiyor.

Yalnızca kopyalama işlevinden rahatsızlık duyarsam, orijinal dosyamın, orijinal dosyamın ve başka bir dosyanın tam olarak yeniden adlandırılmış bir kopyasını, daha büyük bir dosya yeniden adlandırılırken aynı boyutta ve yolsuzluğa sahip olurum.

Herhangi bir fikrin var mı? Oldukça basit olması gerektiği gibi görünüyor.

+1

Dosya yüklenen işlem tamamlandı mı? Dosya tanıtıcı kapalı mıydı? Tüm tamponlar temizlendi mi? – Konerak

+0

Bu çözüme göre: http://stackoverflow.com/questions/3159431/php-change-file-extension, bir geçici çözüm kopya kullanmaktır. Yine de, bunu yapmamalı. – Horus

+0

@Horus - Kopyalamayı denedim, ancak sonuçların tuhaflığını da buldum. Daha önce hiç kullanmadığım bu Pluploader ile bir şeyler olmalı. – Bob

cevap

2

ben unutmuştum yığın özelliği açık. Bir şeyi test etmek için açmış olmalı. Hangi nedenle olursa olsun, betik çalıştığında dosyanın son parçası henüz tam olarak eklenmemişti. Yine de tüm giriş için teşekkürler!

0

Dosyaya kendiniz mi yazıyorsunuz? Öyleyse, sorun, fflush veya fclose numaralı bir aramayı kaçırmanız olabilir. (Dosyanın yazılmaması ve dosyanın artık PHP tarafından yazılmaması, dosyanın Linux'a ya da başka bir Unix'i kullanması durumunda gerçekleşmezdi, ancak Windows üzerinde tasarlayabiliyordum.)

+0

Hayır, kendi dosyama herhangi bir yazı yazmıyor. Sadece plupload'a izin ver. Bu dosyanın uygun şekilde fclose kullandığını söyleyebilirim. – Bob

4
  1. dosya şu anda bir yerde bu istekte fopen() aynı dosya fclose aramak emin olun eğer move_uploaded_file
  2. kullanmak HTTP POST tarafından yüklenip yüklenmediğini()
İlgili konular