Ga naar inhoud


php vraagje of download .gz en unzip


Gast SatMann

Aanbevolen berichten

Gast SatMann

Hi guys,

 

wie helpt mij een handje verder met deze vraag.

ik zoek een php scriptje om een bestand te downloaden via ftp in php, en het uitpakken.

Eerst zou ik alle files in een map die eindigen op .xml willen verwijderen.

dan zou ik een nieuwe .gz file moeten afhalen, uitpakken, en de .gz verwijderen.

 

probleem is dat de xml een vaste naam heeft maar daarin ook een datum. dus de file ziet er uit als bv :

Ditis_mijnfile_2010-07-07_nl_BE_ennogiets.xml.xml.gz

 

dus ik zou moeten kunnen zeggen, haal de file af die de waarde :

Ditis_mijnfile heeft EN nl_BE heeft.

 

kan dat?

ik heb nu al deze code voor het afhalen maar uiteraard het stukje waar die datum staat heb in nog niet gevonden alsook de ungzip.

 

Code:
$conn = ftp_connect("xxxxxx.com") or die("Could not connect");ftp_login($conn,"xxxx","xxxx");echo ftp_get($conn,"Ditis_mijnfile_2010-07-07_nl_BE_v1-0_xml.xml.gz","Ditis_mijnfile_2010-07-07_nl_BE_v1-0_xml.xml.gz",FTP_BINARY);ftp_close($conn);

 

iemand een hint of ideeke?

 

thx

Link naar reactie
Delen op andere sites


Gast SatMann

ondertussen heb ik al gevonden hoe ik eerst de .xml en de .gz files verwijder bij start van import.

 

Code:
foreach (glob("*.xml") as $filename) {   echo "$filename -bestandsgrote :  " . filesize($filename) . " goed verwijderd<br>";   unlink($filename);}foreach (glob("*.gz") as $filename) {   echo "$filename -bestandsgrote :  " . filesize($filename) . " goed verwijderd<br>";   unlink($filename);}

 

nu nog enkel de manier vinden om een stuk van een file te gaan opzoeken om die te downloaden...

 

hopelijk kan iemand mij hier bij helpen.

Link naar reactie
Delen op andere sites

Probeer eens met de functie strstr()

Die geeft een true als de string werd gevonden.

 

Dus ga je controleren als "Ditis_mijnfile" en "nl_BE" in het bestand voorkomen.

Indien ja, download het, anders niet.

 

Php Code:
$bestand = "tecontrolerenbestand.xml";if (strstr($bestand, "Ditis_mijnfile") && strstr($bestand, "nl_BE")){	doe iets 	}	else{	   doe niets;   } 

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Gast SatMann

euh punch,

 

voor dat je toch kan controleren via ftp in php of een file bestaat, moet je toch al eerst contact gaan maken met je ftp.

dus je moet toch in loggen op je ftp en dan moet je al je file gaan zoeken als die voldoet aan die vereiste dan pas mag je dit binnen trekken.

 

of zie ik het mis?

Link naar reactie
Delen op andere sites

Gast SatMann

Punch,

 

kheb het al gevonden

ik doe ook een readdir en vergelijk zo de file die ik heb met de eventuele nieuwe file.

 

enkel het uitpakken van een .gz werkt niet.

ik krijg geen foutmelding maar hij doet ook niets.

ik gebruik : exec (gunzip file.gz);

maar er gebeurt niets.

Link naar reactie
Delen op andere sites

Gast SatMann

kheb al gevonden dat ik dit kan gebruiken :

$execute = "gunzip -".$test ;

`$execute`;

 

waar de $test mijn filename is als mijnfile.xml.gz

 

maar da werkt niet, hij heeft geen foutmelding nog doet hij iets.

 

ik test dit wel op een windows machine met WampServer.

de rechten op die map waar het moet gebeuren heb ik in windows als op schrijven gezet, but no luck.

Link naar reactie
Delen op andere sites

Origineel bericht van: SatMann
euh punch,

voor dat je toch kan controleren via ftp in php of een file bestaat, moet je toch al eerst contact gaan maken met je ftp.
dus je moet toch in loggen op je ftp en dan moet je al je file gaan zoeken als die voldoet aan die vereiste dan pas mag je dit binnen trekken.

of zie ik het mis?


Ik dacht dat je die verbinding en zo al had.

Hier een script die met een ftp server verbind en gaat controleren als er in een bepaalde map op die server een bestand staat die voldoet aan de 2 voorwaarden die je opgeeft.
Indien de twee voorwaarden zijn voldaan en er slecht 1 bestand die aan die voorwaarden voldoet, dan wordt het gedownload naar de map die jij opgeeft.

Succes

Php Code:

<?php// Variabelen declareren.$ftp_server = "ftp server adres"; $ftp_user_name = "ftp login"; $ftp_user_pass = "ftp wachtwoord"; //De map op de server waaruit je wil downloaden ("/" = root van de server)$map_op_server = "/"; //Naam waaronder het gedownloade bestand zal worden weggeschreven$destination_file = "naam.xml.gz"; //voorwaarden waaraan het bestand moet voldoen$voorwaarde1 = "Ditis_mijnfile";$voorwaarde2 = "nl_BE";// maak een basis connectie aan //@ = opvangen foutmelding bij geen connectie@$conn_id = ftp_connect($ftp_server);// meldt je aan met een gebruikersnaam en wachtwoord//@ = opvangen foutmelding bij geen connectie@$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);// controleer de verbindingif ((!$conn_id) || (!$login_result)) {echo "FTP connectie naar <B>".$ftp_server."</B> met gebruiker ".$ftp_user_name."  mislukt!<BR>";die();} else {echo "Verbonden met FTP server: <B>".$ftp_server."</B>, als gebruiker ".$ftp_user_name."<BR><BR>";}// navigeren naar de downloadmapif (ftp_chdir ($conn_id, $map_op_server)) {echo "Navigeren naar ".$map_op_server." gelukt<P>";} else {echo "Niet gelukt om naar  ".$map_op_server."  te navigeren<P>";}// laat de bestanden in de map zien en zet ze in een array ter controleecho "bestanden weergeven die aan de zoekopdracht voldoen:<BR>";$aantal = array();echo "<ul>";foreach(ftp_nlist($conn_id, '') as $entry) {	if (strstr($entry, $voorwaarde1) && strstr($entry, $voorwaarde2)){		echo "<li>".$entry."</li>";		$te_downloaden_bestand .= $entry;				array_push ($aantal, $entry);	   		}		}echo "</ul>";//controle hoeveel bestanden aan de voorwaarden voldoen, indien slechts 1 => download het bestand.if (count($aantal) == 0){		echo "Geen bestanden gevonden die aan de voorwaarden voldoen<BR>";	}	else if (count($aantal) > 1){		echo "Er zijn ".count($aantal)." bestanden die aan de voorwaarden voldoen<BR>";	}	else{		//Download het bestand		$download = ftp_get($conn_id, $destination_file, $te_downloaden_bestand, FTP_BINARY);		}//controle als de download is gelukt				if (!$download) {			echo "<font color=red>Niets gedownload</font>";		} else {			echo "<font color=red>".$te_downloaden_bestand." is succesvol gedownload</font>";		}// sluit de FTP connectieftp_close($conn_id);?>

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Gast SatMann

Hi punch,

 

kheb alles gevonden en het werkt, :-)

maar enkel het uitpakken lukt voor geen meter.

kijk maar wat ik heb :

en ja de map staat op 755 rechten. waarin dit gebeurt

 

Code:
// define some variables$ftp_server='xxxx';$ftp_user_name='xxxxx';$ftp_user_pass='xxx';// 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);$bestand = ftp_nlist($conn_id, ".");$test = ($bestand);foreach ($bestand as $test) {if (strstr($test, "n_property_translations_") && strstr($test, ".gz")){if( file_exists( $test ) ) { }else{		if ($handle = opendir('.')) {while (false !== ($file = readdir($handle))) {	if ($file != "." && $file != "..") {		if (strstr($file, "n_property_translations_")){			unlink($file);			echo "<br>$file mag weg en download nieuwe file $test<br>";			// try to download $server_file and save to $local_file			if (ftp_get($conn_id, $test, $test, FTP_BINARY)) {				echo "Deze file is goed afgehaald: $test <br>";				$execute = "gunzip -".$test ;				`$execute`;							} else {				echo "Er was een probleem<br>";			}													}			}}closedir($handle);}// try to download $server_file and save to $local_fileif (ftp_get($conn_id, $test, $test, FTP_BINARY)) {	echo "Deze file is goed afgehaald: $test <br>";	$execute = "gunzip -".$test ;	`$execute`;						} else {	echo "Er was een probleem<br>";}					 }}}// close the connectionftp_close($conn_id);
Link naar reactie
Delen op andere sites

Je moet het pad mee meegeven waar je wil uitpakken

In dit voorbeeld de map uitpakken die in de root van de server staat.

 

php code die je in jou script moet plaatsen

maak in de root van de server de map uitpakken aan geef hem 777 rechten

 

Php Code:
$path = '/uitpakken';$execute = "gunzip -".$path." $test";	`$execute`; 

 

Dan zou het moeten werken

 

EDIT:

Ik heb het even bekijken, en hij pakt het wel uit, maar maakt er een nieuwe gz file van?

 

trouwens de functies unzip en gunzip vind ik niet terug op de php.net

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Gast SatMann

Wel punch

 

als ik de live map op de server op rechten 777 zet dan voert hij zelfs mijn php niet uit.

als ik die op 755 zet dan wel???

 

en het uitpakken gebeurt bij mij niet. wat ik ook doe...

 

ksnap het echt niet meer confused

Link naar reactie
Delen op andere sites

Oei vergeten te zeggen

 

Je moet de gz file die je hebt gedownload chmod naar 777 doen.

Maar omdat hij nog maar net is gedownload heb je geen rechten op dat bestand.

 

oplossing touch() gebruiken.

 

In jou geval het bestand $test

 

touch("pad_naar_de_map" . $test);

chmod("pad_naar_de_map" . $test, 0777);

 

Let op die 0 moet voor 777 staan.

 

Daarna uitpakken.

 

Toen werkte het uitpakken bij mij wel, ik krijg echter opnieuw een gz file. cry

 

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Gast SatMann

ik heb het werkende !!!

 

ik heb de map gewoon op rechten 755 laten staan maar ik roep het system command op

dus :

Code:
$directory =  dirname(__FILE__);system('gunzip '.$directory.'/'.$test);

 

dat werkt voortreffelijk en de .gz is dan ook mooi verwijderd :-)

Link naar reactie
Delen op andere sites

Gast SatMann

en punch,

 

er zat nog een fout in.

nu is het juist en zal je geen dubbele .gz of een nieuwe krijgen :-)

 

ik ga nu eerst checken of er een file op de externe server bestaat die .gz heeft en gelijk is aan mijn criteria.

zoja dan check ik die file zonder .gz of die .xml bestaat en exact hetzelfde is.

zoja : doe niets

zoniet : haal de .gz nieuwe file af en pak hem uit.

en verwijder de oude file.

 

dit werkt nu uitstekend !

 

Code:
<?php$directory =  dirname(__FILE__);echo '*****************<br>START MET FILE<BR>*****************<BR><BR>';// define some variables$ftp_server='XXXX';$ftp_user_name='XXX';$ftp_user_pass='XXX';// 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);$bestand = ftp_nlist($conn_id, ".");$test = ($bestand);foreach ($bestand as $test) {	if (strstr($test, "n_catalog_") && strstr($test, "_nl_BE.xml.gz")){		$xmlfile = str_replace('.gz','',$test);		if( file_exists( $xmlfile ) ){			 echo 'BESTAAT :'.$xmlfile;		 }else{			echo 'BESTAAT NIET :'.$xmlfile;				if ($handle = opendir('.')) {					while (false !== ($file = readdir($handle))) {						if ($file != "." && $file != "..") {							if (strstr($file, "n_catalog_") && strstr($file, "_nl_BE.xml.xml")){								unlink($file);								echo "<br>$file mag weg en download nieuwe file $test<br>";																		}													}					}				closedir($handle);				}						// try to download $server_file and save to $local_file			if (ftp_get($conn_id, $test, $test, FTP_BINARY)) {				echo "Deze file is goed afgehaald: $test <br>";				system('gunzip '.$directory.'/'.$test);				echo "ik unzip dit = $directory/$test<br>";													} else {				echo "Er was een probleem<br>";			}										 }				}}// close the connectionftp_close($conn_id);?>
Link naar reactie
Delen op andere sites

Werkt idd prima, echter heb ik volgend probleem.

 

Als ik in de .gz file bijvoorbeeld een jpg steek dan pakt hij die wel uit, maar de extentie .jpg is verdwenen??

voorbeeld afbeelding.jpg in de .gz file pakt hij uit als afbeelding zonder extentie.

 

Gevolg, die bestanden zijn niet bruikbaar.

 

 

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet een lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Registreer voor een nieuwe account in onze community. Het is erg gemakkelijk!

Registreer een nieuwe account

Inloggen

Heb je reeds een account? Log hier in.

Nu inloggen
  • Wie is er online   0 leden

    • Er zijn geen geregistreerde gebruikers deze pagina aan het bekijken
×
×
  • Nieuwe aanmaken...