2016-04-02 8 views
0

Ürün resimleri almak için bir veritabanı kullanan bir web sitesinde çalışıyorum. Her şey gayet iyi çalışıyor, bu yüzden görüntü dosyalarını yerel masaüstümden ftp.server dosyasına kolayca aktaran bir sayfa yapmak istedim. Şimdi bu gerçekten garip bir şey oluyor ve nedenini anlayamıyorum.HTTP dosya yükleme 1 dosya için çalışır, ancak başka dosya yok

Test aşamasındayken, belirli bir dosya "haircut.jpg" ile denemeye devam ettim. Sadece rastgele bir pic indirilmiş. Bir süre sonra, sayfa çalıştı ve ftp-sunucusuna bu dosyayı "haircut.jpg" yükleyebilirdim.

Şimdi ftp-sunucuma daha fazla resim yüklemek için sayfayı kullanmaya başlamak istiyorum ancak SADECE bu görüntü "haircut.jpg" çalışacaktır. Ben çalışsam diğer görüntü başarısız olur ve bana ertesi hata veriyor: Gerçekten bu ne olabileceğini hiçbir ipucu var

Warning: ftp_put(kabouter.jpg): failed to open stream: No such file or directory in...

. Ftp-sunucumdan "haircut.jpg" dosyasını sildim, fakat tekrar yüklemeye devam edebilirim, her zaman çalışır. Başka bir tarayıcıyla denedim; Aynı problem devam ediyor.

Diğer dosyalar, aynı boyutta (daha küçük ve daha büyük denedim) EXACT aynı klasöründedir. .jpg ile diğer dosyaları denedim. Diğer klasörleri denedim. Çalışmıyor, sadece belirli bir "haircut.jpg" çalışıyor. aşağıdaki gibi

Ben ftp-transferini kullanan tüm koddur:

//FTP: 
$ftp_server = "ftpserver"; 
$ftp_username = "username"; 
$ftp_userpass = "password"; 
$remote_dir = "/test/"; 

$target_file = $remote_dir.basename($_FILES['afbeelding']["name"]); 
$uploadOk = 1; 
$imageFileType = pathinfo($target_file, PATHINFO_EXTENSION); 

//Setup basic connection 
//ftp_connect(host, port [def=21], timeout [def=90]) 
$ftpConn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server"); 
$login = ftp_login($ftpConn, $ftp_username, $ftp_userpass); 

Ben Sonraki kod bloğu soruna neden olmadığını düşünüyorum, ama ben yine de göndeririz:

//Check if image file is a actual image or fake image 
if(isset($_POST["submit"])) 
{ 
    $check = getimagesize($_FILES['afbeelding']["name"]); 
    if($check !== false){ 
     echo "File is an image - " . $check["mime"] . "."; 
     $uploadOk = 1; 
    } 
    else{ 
     echo "File is not an image."; 
     $uploadOk = 0; 
    } 
} 
//Check if file already exists 
if(in_array(basename($_FILES['afbeelding']["name"]), ftp_nlist($ftpConn, $remote_dir))) 
{ 
    echo "Sorry, file already exists."; 
    $uploadOk = 0; 
} 

//Check file size 
if($_FILES['afbeelding']["size"] > 3000000) 
{ 
    echo "Sorry, your file is too large."; 
    $uploadOk = 0; 
} 

//Allow certain file formats 
if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif") 
{ 
    echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed."; 
    $uploadOk = 0; 
} 
Bu

FTP transfer aslında sürer idi yer:

//Check if $uploadOk is set to 0 by an error 
if($uploadOk == 0){ 
    echo "<br>Sorry, your file was not uploaded."; 
} 

//If everything is OK, try to upload the file 
else 
{ 
    //Check if ftp transfer was succesfull 
    if(ftp_put($ftpConn, $target_file, basename($_FILES['afbeelding']["name"]), FTP_ASCII)){ 
     echo "The file ". basename($_FILES['afbeelding']["name"]). " has been uploaded."; 
    } 
    else { 
     "Sorry, there was an error uploading your file."; 
    } 
} 

//Remember to always close the ftp connection 
ftp_close($ftpConn); 

kimseye sorunu tanır ve umut bana yardımcı olabilir. Şu anda clueless.

+0

Muhtemelen bunu zaten http://php.net/manual/en/function.ftp_put.php adresinde okuyorsunuz, ancak FTP_BINARY 'inin' FTP_ASCII 'olduğu yerde olması gerektiğini akla getiriyor gibi görünüyor. Daha önceki bir yükleme işlemiyle bir ASCII dosyasına dönüştürülmüş/bozuk olacak. '$ Targetfile' bir nedenden ötürü boş olabilir - aynı sayfada ftp_put 'ftp_pasv() 'da keşfedilmeye değmeden önce yankılamayı deneyin. – Steve

+0

Bir sorun yaratabilecek olan "Üzgünüm, bir hata ..." öncesinde "yankı" eksik. – Steve

+0

Bu, PHP FTP'yi yerel bir makineden uzak bir sunucu konumuna yükleyemeyeceğinizi gösterir - http://stackoverflow.com/questions/24709893/php-ftp-put-failed-to-open-stream?rq= 1 - Belki de bir dosya yükleme komutunu kullanarak, bir dosya yükleme komutunu seçip yüklemek için http://www.w3schools.com/php/php_file_upload.asp gibi bir dosya yükleme komut dosyasını düşünmeniz gerekir. Muhtemelen çalışkan olan, bir yerlerde geçici bir klasörde gizemli bir şansla gizleniyor ve böylece sunucu üzerinde kopyalanabilir. – Steve

cevap

1

$_FILES dizisinin "name" öğesi, okuyabileceğiniz bir dosyanın adını içermiyor! Sunucunun değil, kullanıcının istemci makinesindeki dosyanın adıdır.

Yüklenen dosyanın sunucuda geçici olarak saklandığı dosyanın dosya adı "tmp_name" öğesindedir.

PHP dosyanızın bulunduğu klasörde "haircut.jpg"'un unutulmuş kopyasının bulunması gerekir.

"tmp_name" (rastgele isim) ile dosyaya erişmek için kullanılan tüm "name" örneklerini değiştirin. FTP yolu ile uğraştığınız (güzel) "name"'u saklayın.

$_FILES yapısı için bkz. POST method uploads.

+0

Her şeyden önce, teşekkürler! "haircu'nun unutulmuş bir kopyasını aldığım gerçeği hakkında haklıydık t.jpg "PHP dosyamın bulunduğu klasörde. Ancak, şimdi "ftp_put ($ ftpConn, $ target_file, basename ($ _ FILES ['afbeelding'] ['tmp_name'])" klasörümde "tmp_name" yazan bir dosya olup olmadığını kontrol eder. php dosyası olduğunu biliyorum. Zaten bir çözüm önerdiğini biliyorum, ancak çalışmayı daha az deneyimlediğimi düşünüyorum. 'tmp_name' adını değiştirmeye çalıştım. '' ftp_put() 'yerine kullanmam gereken başka bir şey var mıdır? – Kenny

+0

Yol bilgisini,' $ _FILES ['afbeelding'] ['tmp_name'] ''den [' basename'] (http://php.net/manual/en/function.basename.php) çağrıyı kaldırın, sadece 'ftp_put kullanın ($ ftpConn, $ target_file, $ _FILES ['afbeelding'] ['tmp_name'] –

+0

Bu gerçekten herşeyi çözdü! Sadece sorunumu çözmüyor, artık $ _FILES ve basename hakkında daha iyi bir anlayışa sahip oldum, yardımınız çok takdir ediliyor. Bu cevabı yapabilseydim, ama stackoverflow'a oldukça yeni olduğum için, bunun için üzgünüm. Ama yine, çok teşekkürler! – Kenny