To tak, za pomocą tego narzędzia https://www.php.net/manual/en/function.fgetcsv.php
Zdekoduj sobie plik .csv na coś bardziej phpowego.
Wówczas masz tablicę. index +1 to kolejna linijka w pliku .csv
A index wartości dla danej kolumny to nazwa tej kolumny (pierwsza linijka pliku .csv).
Później w tablicy np. $tab[1]['kod_promocyjny]
Gdzie 1 to 1 linijka pliku .csv a kod_promocyjny to kolumna z kodem promocyjnym. Sprawdzasz według jakichś kryteriów odpowiednich dla tego kodu czy ma poprawny format.
Jesli tak to
Insert do bazy
I jeśli ten zewnętrzny serwis ma API to według ich dokumentacji wysłać odpowiednie żądanie.
Oczywiście wszystko w pętli. Pętlę możesz zrobić na parę sposób
while($row = fgetcsv($plik)){
//Gdzie row to Twoja tablica gdzie wcześniej opisałem jak ją zaczytywać
//$row['kod_promocyjny']
}
Albo
$file = fgetcsv($plik);
$max = count($file)
for($min=1; $min < $max; $min++){
//$file[$min]['kod_promocyjny']
$min++;
}
Jesli chcesz, żeby użytkownikowi wyświetliła się informacja o pomyślnym zaimportowaniu to możesz kod z importem wywołać np. ajaxem albo czymś nowszym. Odebrać wynik i jak jest ok wyświetlić odpowiedni komunikat. W konfiguracji serwera apache jeśli dobrze kojarzę można ustawiać timeout dla poszczególnych katalogów, ale mogę się mylić, także możesz ten plik wywoływać w takim katalogu timeout na wszelki ustawić większy. I wszystko powinno pykac
Jeśli nie chcesz żeby w tym samym czasie ktoś inny mógł sobie też importować to, w jakiejś tabeli np. do stanów operacji, utwórz sobie rekord name - isImport i jeśli ktoś importuje to na początku zmień mu wartość, np. druga kolumna value na 1 i jak skończy importować to zmień na 0, a przed importowaniem jeszcze sprawdź czy jest wartość (kolumna value) ustawiona na 0 jak nie to wyświetl, że nie można importować, bo już ktoś to robi. I wtedy w takiej tabeli możesz inne rzeczy też w taki sposób zapisywać dla innych funkcji w Twoim programie jeśliby musiały jakieś być.
A żadne API nie musi mieć ileś tam przerwy między żądaniami. Jeśli ich API przyjmuje pliki json to wtedy używasz funkcji json_encode dla swojej tablicy z danymi i ten json im tam wywalasz. Tutaj już musisz sobie przejrzeć dokumentację ich API. Jeśli każdy kod musi być osobno im tam przesłany to zaraz po zapytaniu do bazy wysyłasz żądanie do API. Szczerze jeszcze nie słyszałem o jakimś setTime dla API.