Ga naar inhoud


php vraagje of download .gz en unzip


Gast SatMann

Aanbevolen berichten

save nen keer uwen file als : foto.jpg.gz

 

en doe dan eens, kijk effen wat dat geeft?

 

bij mij zijn natuurlijk alle .gz files als :

bestandsnaam.extentie.gz

 

want als je goed kijkt zie je dat mijn parameter $test

eigenlijk een afgekapte : filenaam.extentie.gz waar ik een replace doe van de .gz.

dus schiet de file over : filenaam.extentie en die gebruik ik als naam om te gunzippen.

 

greetz

Link naar reactie
Delen op andere sites


Wat ik mis is een foutafhandeling als de ftp server niet bereikbaar is...

 

En het stukje code

Code:
while (false !== ($file = readdir($handle)))

is niet logisch... (Je schrijft als iets niet "false" is, met andere woorden je kan beter testen op "true")

 

Je kan beter schrijven:

Code:
while ($file = readdir($handle))

Maar het is zowiezo niet echt "handig" om het wel of niet falen van een assignment te gebruiken als loop voorwaarde...

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Wat de foutafhandeling betreft voor de connectie ben ik het met je eens Big Fellow,

 

In mijn eerste script staat die foutafhandeling er in.

Zet voor beide verbindingen een @.

Dit zorgt ervoor dat je geen foutmelding krijg als er geen verbinding mogelijk is.

Daarna voor je een controle uit.

 

Php Code:
@$conn_id = ftp_connect($ftp_server);@$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>";} 

 

Wat de while lus betreft voor het doorlopen van de map heeft Satman het bij het rechte eind.

while (false !== ($file = readdir($handle))) is wel degelijk de juiste manier om door een map te lopen. Het is inderdaad logischer om op true te gaan controleren, maar op http://php.net/manual/en/function.readdir.php staat duidelijk vermeld dat je op false moet controleren. Zie eerste voorbeeld.

 

@Satman,

 

Inderdaad als ik hem foto.jpg.gz noem werkt het wel juist

 

 

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Puch;

 

Waarom probeer je in te loggen zonder eerst te controleren of je connectie valid is?

 

Over de check; Het is "normaal" om de uitkomst van een functie/berekening te vergelijken met false of true.

 

Dus het is normaler om te schrijven if ($test === TRUE) dan if (TRUE === $test) . Ook maakt het programmeer technisch niets uit dat je schrijft if ($test === TRUE) of if ($test !== FALSE) .

 

Het gaat allemaal om het leesbaar houden van code. (Ok, het is zelfs mogelijk dat de test op TRUE sneller is dan de test op !FALSE, maar het kan goed wezen dat de interpreter dit al opvangt)

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Origineel bericht van: Puch

Php Code:
@$conn_id = ftp_connect($ftp_server);// Controleer of de connectie is opgezet;if ($conn_id !== FALSE) { // $conn_id zal FALSE wezen als de connectie niet kan worden opgezet. Als de connectie wel kan worden opgezet is hij van niet boolean type en bevat hij een connectie id.  @$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);// Controleer of de login goed is verlopen  if (!$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 />";  }// Hier de rest van de functie} // Niet vergeten de "if" af te sluiten. 


Uiteraard kan je ook doen:
Php Code:
if ($conn_id !== FALSE) die ('Kan geen verbinding maken met de server'); 

Maar ik vind het netter om een functie goed af te sluiten. Met andere woorden zoals ik hierboven doe.

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Origineel bericht van: SatMann
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


Dat "probleem" van de vaste naam met de datum erin maakt het juist zeer eenvoudig...
Gebruik de date functie... Dan krijg je iets van
Php Code:
$file = "Ditis_mijnfile_".date("Y-M-d")."_nl_BE_ennogiets.xml.xml.gz"; 

(Even de juiste syntax van date controleren! Ik heb het even uit mijn hoofd gedaan....)

Misschien hoef je dan niet te gaan zoeken???

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

kheb alles aangepast, enkel die die(); lapt mij nog wat.

 

want eigenlijk in die php heb ik twee zo'n ftp blokken, want ik moet 2 verschillende files afhalen van twee verschillende ftp's.

 

dus als die eerst mislukt heb ik met die : die(); dat de pagina stopt, is de ftp dan verkeerd van de eerste blok loopt de tweede dus niet meer.

 

enig idee hoe we de die(); kunnen vervangen door een commando die zegt, stop met dit en doe verder met de volgende blok?

 

 

Link naar reactie
Delen op andere sites

Dat kan, maar dan moet je in 2 pagina's gaan werken en het is omslachtig.

 

Op pagina 1 zet je het script om xml file 1 en file 2 af te halen.

In je login controle zet je die die(), maar dan met een header functie er in.

 

Php Code:
die(header("location:pagina2.php")); 

 

op pagina 2 zet je dan het script op enkel file 2 af te halen.

 

Als de eerst login faalt, dan ga je automatisch naar pagina 2 en haalt hij de tweede file af.

Lukt de 1ste connectie wel, dan haalt hij via pagina 1 beide files af.

 

Maar als je dit wil gaan gebruiken moet je je script iets gaan aanpassen.

Bij de header functie mag je namelijk geen html output hebben voor je hem gebruikt.

 

Je login controle ziet er dan ongeveer zo uit

 

Php Code:
@$conn_id = ftp_connect($ftp_server);// Controleer of de connectie is opgezet;if ($conn_id !== FALSE) {   @$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);// Controleer of de login goed is verlopen  if (!$login_result) {	die(header("location:pagina2.php));  } else {	echo "Verbonden met FTP server: <b>".$ftp_server."</b>, als gebruiker ".$ftp_user_name."<br /><br />";  }// Hier de rest van de functie} // Niet vergeten de "if" af te sluiten.  

 

Je kan eventueel nog een session aanmaken om op de tweede pagina een melding weer te geven dat het eerste bestand niet is gedownload.

Hiervoor moet je session_start(); op zowel je eerste als tweede pagina net onder <?php plaatsen, anders werken sessions niet.

 

Php Code:

<?phpsession_start();//De rest van het script?>

 

Dan ziet je login controle op pagina 1 er ongeveer zo uit

 

Php Code:
@$conn_id = ftp_connect($ftp_server);// Controleer of de connectie is opgezet;if ($conn_id !== FALSE) {   @$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);// Controleer of de login goed is verlopen  if (!$login_result) {	   $_SESSION['connection_fail'] = "FTP connectie naar <b>".$ftp_server."</b> met gebruiker ".$ftp_user_name."  mislukt!<br />";	die(header("location:pagina2.php));  } else {	echo "Verbonden met FTP server: <b>".$ftp_server."</b>, als gebruiker ".$ftp_user_name."<br /><br />";  }// Hier de rest van de functie} // Niet vergeten de "if" af te sluiten.  

 

 

Pagina 2 begint dan met

 

Php Code:

<?phpsession_start();if (isset($_SESSION['connection_fail'])){   echo $_SESSION['connection_fail'];   unset($_SESSION['connection_fail']);}//De rest van het script?>

 

 

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

Waarom lastig doen met twee pagina's?

Gewoon een if functieblok maken, en als het "fout gaat" eruit stappen met een break. Dan een tweede if functieblok en jezelf herhalen...

Je kan het ook mooier doen en een functie maken van je ftp ophaal verhaal welke je dan aanroept met de filenaam/host/usr/pass etc...

 

Zo zijn er vele wegen naar Rome.. :-)

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

Link naar reactie
Delen op andere sites

Yep, is ook een manier.

Die twee pagina's was het eerste wat in me opkwam.

 

Zoals je zegt er zijn in programmeren heel veel weten naar eenzelfde resultaat.

 

Ben ook geen pro in php, vandaar het eerst wat in me opkomst ga ik meestal voor.

iMac 27" macOS Sierra
iPhone 5s iOS 10

Link naar reactie
Delen op andere sites

big fellow,

 

dus in plaats van die die() zou je gewoon break() doen?

 

want ook ik ben een leek in php, en het gemaakte script is louter door plak en lees werk en testwerk dat ik daar op kom :-)

Link naar reactie
Delen op andere sites

Pseudo code:

 

Zet download vlag op false.

Open ftp connectie;

Als connectie ok (if statement)

--> Login? Faal --> break 1

--> Download? Faal --> break 1 Anders download vlag --> True

Log uit/sluit connectie

Einde if

 

Als download vlag = false

--> Connectie naar server 2

--> Connectie ok? (if statement)

--> Login? --> Faal --> break 1

--> Download? Faal --> break 1 Anders download vlag --> True

Log out/sluit connectie

Einde if

 

Nu heb je een vlag die verteld of de download is gebeurt...

 

Maar nogmaals, vele wegen naar Rome...

 

 

“Success is not final, failure is not fatal: it is the courage to continue that counts.” ~ Winston Churchill

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...