Nasıl PHP ile dosya ve dizinleri taşımak toplu yok

3 Cevap

Ben birçok dosya ve dizinleri ile bir site var. Dizinleri çeşitli düzeylerde derin. Sorun onlar yanlış dizinde olmasıdır. Onlar /www/upload/site/ olan ve her şeyi /www/ taşınmalıdır. Her iki dizin yukarı taşımak için kısa bir senaryo var mı?

Teşekkür ederim.

3 Cevap

Diğer yanıtlayanın tarafından belirtildiği gibi, PHP bunun için en şık çözüm değildir ve sadece birlikte dosyaları taşımak için bir FTP programı indirmek için çok daha kolay olurdu. Bunu PHP kullanarak uygulamak istiyorsunuz Ancak, sizin gibi bir şey yazabilirsiniz:

$dir=opendir('/www/upload/site/');

while ($file = readdir($dir)) {
    if ($file == '.' || $file == '..') continue; // skip references to self

    rename('/www/upload/site/'.$file, '/www/'.$file);
}

closedir($dir);

Bu süreç verimsiz ve bu Rename Function veya Copy Function sizin durumunuzda çalışmaz kullanma gibi kolay yöntemleri gibi yaklaşık getirilir. Eğer bunun içinde hareket ediyoruz gibi değil boş olarak 'için yeniden adlandırma' konum dizin gerektirecek yeniden adlandırma, kopyalama tam dizinleri kopyalamak olamaz. Bu nedenle, süreç ile ya da her dosya döngü ve her öğe üzerinde PHP'nin rename işlevini kullanarak manuel olarak yeni bir konuma hareket bırakılır.

Bu süreç PHP için gerekli olan kesinlikle bir değil iken, bunu yapmak için mükemmel mümkündür ve nasıl know her zaman yararlıdır. Bu dosyaları / dirs ile çalışma hakkında daha fazla bilgi için PHP's File System Functions üzerinde okumaya değer olurdu.

Bir komut dosyası gerekmez. Böyle FileZilla veya FireFTP olarak iyi bir ftp programı (firefox gerekiyor) alın ve sadece tüm seçebilirsiniz, ve www/upload/ için tüm klasörleri ve dosyaları sürükleyip www/upload, ve ftp programı sizin için hareket edecek.

Ben sunucu kurmak nasıl bilmiyorum, ama muhtemelen bu php komut dosyası çalıştıran onlar yüklendiği sürece siz de bir php komut dosyası kullanarak (yüklenen dosyaları taşımak için gerekli izinlere sahip olası değildir kullanıcı olarak çalışmaz .. .).

Elbette böyle bir şey deneyebilirsiniz:

<?php
    exec('mv /www/upload/site/* /www');
?>

ama ben bu konuda çok dikkatli olacaktır.