Bekijk Volledige Versie : FTP file downloaden op server en uitpakken in map
Andre Holman
08/11/20, 18:13
Beste Leden,
IK wil graag van een server dmv ftp zip files elke dag 1 uploaden en deze moet dan uitgepakt worden op een subdomein/map welke dus dan elke dag bijgewerkt zal worden.
Waneer het zitbestand uitgepakt zal worden moet deze ook de bestaande files met zelfde naam vervangen.
Wat is jullie advies en hoe krijg ik dit voorelkaar. Het zijn elke dag circa 3000 tot 4000 images en 25% pdf files
Ik zou voor een andere oplossing gaan dan ftp.
Als het een Linux server is dan zou ik via cron doen met een bash of sh script.
Je kunt dan je .zip klaarzetten in een FTP map en via de cron opdracht kun je controleren of er een nieuw bestand staat en dan deze laten uitpakken.
Heb hier nog iets van liggen. zal even in mn oude nas mappen kijken.
kom er vandaag op terug.
Bijgaande php dingetje.
Had ook nog ergens bash scripts liggen.
Heb je wel toegang tot SSH? of is dit shared hosting omgeving?
Script 1:
<?php
// define some variables
$local_file = 'filename.jpg';
$server_file = 'filename.jpg';
$ftp_server="www.abc.com";
$ftp_user_name="username";
$ftp_user_pass="password";
$conn_id = ftp_connect($ftp_server);
// login with username and password
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
// try to download $server_file and save to $local_file
if (ftp_get($conn_id, $local_file, $server_file, FTP_BINARY)) {
echo "Successfully written to $local_file\n";
}
else {
echo "There was a problem\n";
}
// close the connection
ftp_close($conn_id);
?>
script 2:
<?php
$zip = new ZipArchive;
$res = $zip->open('corp.zip');
if ($res === TRUE) {
$zip->extractTo('test/');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}
?>
Waarom gebruik je FTP. Is rsync bijvoorbeeld geen oplossing? Met FTP upload je namelijk ook de bestanden die je al hebt. Kost onnodig ruimte, tijd en dataverkeer. Met rsync zou je alleen de verschillen kunnen uploaden/downloaden.
Heb je toegang tot beide servers? Zo ja, zou je met Ansible aan de gang kunnen gaan. Indien je gebruik maakt van AWX/Tower kan je een "schedule" inregelen. Indien je geen AWX/Tower hebt, maar bijvoorbeeld Jenkins, zou je de "schedule" in Jenkins kunnen regelen.
Het kan op heel veel verschillende manieren. Heb je enkel toegang tot de FTP server, of toegang tot beide servers?
Je kunt rsync toch gewoon in een cron starten? Ansible en Jenkins maken het alleen maar complexer.
Je kunt rsync toch gewoon in een cron starten? Ansible en Jenkins maken het alleen maar complexer.
Hoe detecteer je dat je cron goed loopt of faalt? Hoe wordt je op de hoogte gehouden? Vang je dit allemaal af in je script?
Voordeel van een Jenkins is bijvoorbeeld:
- Je kan Post actions defineren. Wat te doen als een cron faalt. Wat te doen als het goed gaat.
- Je kan terug kijken wanneer het goed gegaan of fout gegaan is.
- Je cron config staat niet meer lokaal op de server, maar op je Jenkins.
Je moet hier ook geen speciaal Jenkins omgeving voor inrichten, maar als het er is, maak er gebruik van :)