Bu dizin zaten varsa ben bilmiyorum eğer PHP kullanarak, nasıl ben FTP sunucusunda bir dizin bir dosya FTP mı?

3 Cevap php

Kullanıcıların benim web sitesine resim yüklemek için izin web uygulaması var.

Ne yapmak istiyorum yerine bu görüntüleri kendimi barındırma, benim CDN (Cachefly) kapalı bu görüntüleri itmek istiyorum.

PHP kullanarak, bir kullanıcı benim sunucuya bir görüntü yükler zaman benim sunucudan başka bir görüntü FTP istiyorum.

Ancak, benim geçerli sunucu dosya yapısı yolunu sürdürmek istiyorum. Anlamı, dosya sistemi planı lokal olarak:

local:  upload/YYYY/MM/DD/uniquefilename.jpg

Yani yüklenecek resmin benim CDN istiyorum:

cdn:  upload/YYYY/MM/DD/uniquefilename.jpg

Sorun dizin / YYYY / AA / GG var, ya da olmayabilir olabilir olmasıdır.

Ben şu PHP kodu kullanıyorum ama şu anda mevcut olmadığında bu dizinleri (/ YYYY / AA / GG) yaratmaz.

How do I FTP an image to a remote server while also maintain the file structure?

<?php
// set up basic connection
$conn_id = ftp_connect($ftp_server); 

// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass); 

// check connection
if ((!$conn_id) || (!$login_result)) { 
        echo "FTP connection has failed!";
        echo "Attempted to connect to $ftp_server for user $ftp_user_name"; 
        exit; 
    } else {
        echo "Connected to $ftp_server, for user $ftp_user_name";
    }

// upload the file
$upload = ftp_put($conn_id, $destination_file, $source_file, FTP_BINARY); 

// check upload status
if (!$upload) { 
        echo "FTP upload has failed!";
    } else {
        echo "Uploaded $source_file to $ftp_server as $destination_file";
    }

// close the FTP stream 
ftp_close($conn_id); 
?>

3 Cevap

Neden ftp_mkdir için Google'dan değil mi? (Ben denedim ve evet, kendi manuel sayfa ilk sonuç olan ilk şeydi.)

Sen metotunun denemek ve (hata bastırılması ile) görüntü yüklemeden önce dizin oluşturabilirsiniz:

// assume you used substr() on your $destination_file to get the directory
// and named that variable $destination_dir
@ftp_mkdir($conn_id, $destination_dir);

Ben genellikle bir ftp_chdir yapmaya çalışın, ve başarısız olursa, ben ftp_mkdir ile dizin yapmak için çalışın ve that başarısız olursa, ben bir hata atmak. Aksi takdirde, dizinleri listelemek çıkış yakalamak, ve o dizine arıyor ayrıştırmak, ve sonra ftp_mkdir yapmak için denemek zorunda gidiyoruz.

Çirkin hack, kuşkusuz.

@ Victor: Peki, biz burada php bahsediyoruz. Eğer daha iyi hissettiren eğer bir try / catch bloğu içinde sarın, ama gerçekten aynı şeyi yapıyor olacak. (Php yok) dizini test etmek için bir yöntem olmadan, böyle bir şey yapmak zorunda gidiyoruz.

Eğer kendini iyi hissettiren, ben herhangi bir farklı yaptım bir php ftp komut dosyası görmedim. Cehennem, böyle kod ftp_mkdir manual page üzerinde!