Op het moment ben ik bezig met een website waarbij ik moet checken of de ingevulde gegevens een FTP server kunnen bereiken.
Met de code:
<?php
$ftpconnect = @ftp_connect($server);
if(!$ftpconnect){
//error
}
?>
Kom je een heel eind als de gegevens kloppen, echter geven een Warning regel 1 als ze niet kloppen. Hoe is dit te voorkomen? Vaak wordt bij zulke connecties gebruikt "OR die('Connectie niet mogelijk')", alleen dit wil ik voorkomen...

Alvast Bedankt,
Frans Piter
Dat hoeft helemaal niet. Hij geeft FALSE terug als ie niet goed is.

Dus:


<?php 
$conn_id = @ftp_connect($ftp_server);

if( $conn_id === false )
{
   echo 'Kon niet verbinden met de ftpserver: '. $ftp_server;
}
?>


Ik ben er alleen niet zeker van als error_reporting aan staat of je dan nog een nasty error krijgt dus daarom die @ ervoor om die te onderdukken. :)
Dat is wat ik ook verwachtte, echter kreeg en krijg ik deze error:
Fouttype: 2: WARNING
Error omschrijving:
ftp_connect(): php_network_getaddresses: getaddrinfo failed: No address associated with hostname

Error_reporting(E_ALL) staat aan met eigen report functie.
<?php
$ftpconnect = @ftp_connect($ftpserver);
if($ftpconnect===FALSE){
$error = true;
}
?>
hmm.. dat is vreemd.
Heb even geen tijd om een voorbeeld te maken, maar als je er een try catch trow blok van maakt misschien dat dat helpt?
Hetzelfde geldt voor mysqli_connect functie...
<?php
try{
if(!mysqli_connect($dbhost,$dbuser,$dbpass,$dbname)){
throw new Exception("Kon geen connectie maken met de database");
}
}
catch(Exception $e){
$error = $e->getMessage();
}
?>
Levert ongeveer zelfde soort foutmelding op.
Dat kan kloppen, want als de hostname niet klopt wordt er op netwerk niveau een foutmelding gegenereerd, dit moet je dus inderdaad dan in een try catch blok afvangen.
Wat staat er in $server?

En haal die @ voor de functie weg. Dat hoort daar niet.
Hoe zou je zo'n try...catch block kunnen bouwen? Ik heb al meerdere dingen geprobeerd/gezocht, echter kan er niet helemaal uitkomen. Ik heb weinig ervaring met try & catch.
<?php
try{
$dbconnect = mysqli_connect($dbhost,$dbuser,$dbpass,$dbname);
}
catch(Exception $e){
$error=true;
}
?>
Bovenstaande (deze + vorige post) werken niet.

Ik hoef alleen te weten of er connectie kan worden gemaakt; er worden geen queries verstuurd.
Dat doe je inderdaad met dit:
<?php
$ftpconnect = @ftp_connect($server);
if(!$ftpconnect){
//error
}
?>


Maar wat staat er nou in $server?
Geef alles wat erboven staat ook eens.
En geef eens een print_r($server); er net boven.
@Eddy Erkelens: De $server variabele is leeg => '' of enig ander user input. Het gaat om een input field waarin de $ftpserver is ingevuld. Het is ook niet erg dat het niet werkt, het moet alleen een 'false' teruggeven. Nu geeft het een PHP-error. Bovenstaande is niet echt gerelateerd, samengevat:
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
set_error_handler("error_handler");

/* Ophalen & Controleren van alle ingevulde waarden alle $_POST */

$ftpconnect = ftp_connect($ftpserver);
if(!$ftpconnect){
$error = true;
}else{
$ftplogin = ftp_login($ftpconnect,$ftpuser,$ftppass);
if(!$ftplogin){
$error=true;
}
}
?>

Ik denk dat het met een try...catch is op te lossen, alleen weet ik niet hoe dit moet :S.
nee... ik denk eerder dat je $ftpserver of $server eens moet gaan vullen met iets.

Hij moet nu verbinding maken met . Dat lukt niet.... duh!

Reageren