Mam katalog z plikami 1,3 mln, które muszę przenieść do bazy danych. Wystarczy pobrać jedną nazwę pliku z katalogu BEZ skanowania całego katalogu. Nie ma znaczenia, który plik pobiorę, ponieważ usunę go, gdy skończę, a następnie przejdę do następnego. czy to możliwe? Wszystkie przykłady, jakie mogę znaleźć, wydają się skanować cały listing katalogu do tablicy. Muszę tylko przechwytywać po jednym na raz ... nie za 1,3 miliona za każdym razem.PHP: Jak mogę pobrać pojedynczy plik z katalogu bez skanowania całego katalogu?
Odpowiedz
ten powinien zrobić:
<?php
$h = opendir('./'); //Open the current directory
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..') { //Skips over . and ..
echo $entry; //Do whatever you need to do with the file
break; //Exit the loop so no more files are read
}
}
?>
Zwraca nazwę kolejnego wpisu w katalogu. Wpisy są zwracane w kolejności, w jakiej są przechowywane przez system plików.
Wolałbym wstawić "." I ".." w bazie danych niż sprawdzać 1,3M razy. –
@ SamyDindane, To sprawdzenie nie potrwa długo, szczególnie w porównaniu do odczytu pliku z dysku i zapisania go w bazie danych ... – Zombaya
Mimo to można uniknąć narzutów (co niewiele pomaga), po prostu wykonując dwa połączenia do 'readdir' przed pętlą, ponieważ' .' i '..' są zawsze pierwszymi wpisami. – connec
readdir załatwi sprawę. Sprawdź przykład na tej stronie, ale zamiast wykonywać wywołanie readdir w pętli, zrób to tylko raz. Dostaniesz pierwszy plik w katalogu.
Uwaga: możesz otrzymać ".", ".." i inne podobne odpowiedzi w zależności od serwera, więc możesz chcieć co najmniej zapętlić, dopóki nie uzyskasz poprawnego pliku.
Wystarczy uzyskać iterator katalogów i szukać pierwszego wpisu, który jest plikiem:
foreach(new DirectoryIterator('.') as $file)
{
if ($file->isFile()) {
echo $file, "\n";
break;
}
}
ten zapewnia również, że kod jest wykonywany na innej zachowanie systemu plików niż ten, którego oczekują.
Zobacz DirectoryIterator
i SplFileInfo
.
Czy to jednak nie ładuje całej zawartości katalogu do tablicy? Właśnie tego Kyle próbuje uniknąć.Może to mieć znaczenie, gdy masz tysiące plików w folderze. – skibulk
@skibulk: Nie, nie, iteruje przez ** DirectoryIterator **, który nie jest tablicą, ale obiektem. To skutecznie zapobiega temu, czego się boisz: tablicy. – hakre
Cool. Jestem przyzwyczajony do tablic "foreach". Więc kiedy 'foreach' uzyskuje dostęp do następnego indeksu' DirectoryIterator', to faktycznie wywołuje metodę (IE getNextFile()) zamiast? Dziwne. – skibulk
czy chcesz zwrócić pierwszy katalog czy pierwszy plik? obie? użyj tego:
utworzyć funkcję „PICKFIRST” z 2 argumentu
function pickfirst($address,$file) { // $file=false >> pick first dir , $file=true >> pick first file
$h = opendir($address);
while (false !== ($entry = readdir($h))) {
if($entry != '.' && $entry != '..' && (($file==false && !is_file($address.$entry)) || ($file==true && is_file($address.$entry))) )
{ return $entry; break; }
} // end while
} // end function
jeśli chcesz odebrać pierwszy katalog na Twój adres ustawiony $file
false i jeśli chcesz odebrać pierwszy (adres i trybu dir lub pliku?) plik w twoim zestawie adresów ustaw $file
na true.
powodzenia :)
- 1. Jak rozpakować pojedynczy plik z tar do innego katalogu?
- 2. jQuery pobrać zdjęcia z katalogu
- 3. utworzyć plik w innym katalogu z php
- 4. Jak odróżnić plik z katalogu w Perlu?
- 5. Jak mogę dodać plik bez zmiany bieżącego katalogu roboczego?
- 6. Jak mogę dodać do białej listy pojedynczy plik w katalogu w pliku .npmignore?
- 7. Jak skopiować plik z katalogu do innego katalogu w Javie
- 8. Przenoszenie/migracja całego katalogu w Magento
- 9. Jak mogę usunąć pliki z katalogu skopiowanego z innego katalogu?
- 10. Załaduj plik z katalogu nadrzędnego
- 11. HG: Aktualizacja katalogu do konkretnej wersji bez klonowania całego repo?
- 12. Android.mk - kompilacja całego pliku źródłowego w katalogu
- 13. Jak mogę dołączyć/rozszerzyć plik jade z katalogu głównego mojego katalogu szablonów w trybie ekspresowym?
- 14. Importować plik z katalogu nadrzędnego?
- 15. Jak utworzyć poprawkę do całego katalogu, aby ją zaktualizować?
- 16. importować plik z innego katalogu
- 17. Jak mogę odczytać plik z katalogu klas w mojej WAR?
- 18. Jak mogę powiedzieć plik z katalogu w Pythonie?
- 19. Dołącz całego katalogu w Pythonie data_files setup.py
- 20. PHP ścieżka katalogu rekurencyjne
- 21. SVN - Jak załadować pojedynczy plik?
- 22. PHP usunąć zawartość katalogu
- 23. Jak pobrać plik bez formularza
- 24. Jak uzyskać plik z katalogu z wzorcem/filtrem
- 25. Jak mogę pobrać najnowszy plik na FTP z PHP?
- 26. Jak mogę pobrać plik z php i Amazon S3 SDK?
- 27. Jak pobrać plik z SFTP używając PHP?
- 28. Lista zawartości katalogu (php)
- 29. Synchronizacja bez skanowania pojedynczych plików?
- 30. Utwórz plik w określonym katalogu
@JonathanSampson Wątpię, że dba o nazwę pliku. Chce pobrać dowolny plik, umieścić go w bazie danych i przejść do następnego. –