Προς το περιεχόμενο

PHP & fsockopen


takis456

Προτεινόμενες αναρτήσεις

Δημοσ.

Έχω ένα πρόβλημα με την συνάρτηση fsockopen. Έχω τον κώδικα:

 

$fs = fsockopen("ip", "port", $errno, $errstr);

if($fs) {

fwrite($fs, $msg);

fclose($fs);

}

 

Ο κώδικας αυτός συνδέεται στην ip και port που του έχω ορίσει και μόλις συνδεθεί στέλνει το $msg. Το πρόβλημα είναι ότι ο server στον οποίο συνδέεται δεν είναι συνέχεια on με αποτέλεσμα όταν δεν μπορεί να συνδεθεί να φαίνεται το παρακάτω μήνυμα και σταματάει η εκτέλεση του script:

 

Warning: fsockopen(): unable to connect to ip:port in /......./scriptfile.php on line tade

 

Σύμφωνα με το manual:

 

If the call fails, it will return FALSE and if the optional errno and errstr arguments are present they will be set to indicate the actual system level error that occurred in the system-level connect() call. If the value returned in errno is 0 and the function returned FALSE, it is an indication that the error occurred before the connect() call. This is most likely due to a problem initializing the socket. Note that the errno and errstr arguments will always be passed by reference.

 

Άρα δεν έπρεπε αντί να σταματάει το script να συνέχιζε η εκτέλεση του και απλά να έβαζε στο $fs την τιμή false?

Δημοσ.

$fs = fsockopen("ip", "port", $errno, $errstr);

if($fs) {

fwrite($fs, $msg);

fclose($fs);

}

 

To manual καλά τα λέει.

 

Εσύ όμως λές:

 

if($fs) { πράγμα το οποίο δεν βοηθάει καθόλου κατα την άποψη μου. Γιατί είτε true είτε false η μεταβλητή fs θα δημιουργηθεί.

 

Αρα το πιο σωστό θα είναι το εξής αφου σου λέει το manual ότι επιστρέφει true or false:

 

if($fs == "true") {

do this;

} else {

die("i can't connect server seems to be down");

}

 

 

Εναλλακτικά μπορείς να κάνεις το εξής:

 

$fs = @fsockopen("ip", "port", $errno, $errstr);

 

Αρα αν είναι false τότε δεν θα δημιουργηθεί και η μεταβλητή $fs

Μια πρόταση κάνω δεν έχω παίξει ποτέ με sockets στην php.

Δημοσ.
telika den einai kalo na mhn diabazeis oloklra ta posts... :/

sorry httpd den eida pos to eipes :S

 

PS: oraio nick httpd! :D

 

:P

 

Υπάρχουν πολλοί τρόποι πάντα να κάνεις κάτι το θέμα είναι τι σε βολεύει καλύτερα

 

Cheers

Δημοσ.

Όντως ωραίο nick :P Thanx παίδες.. το πρόβλημα ήταν ότι αυτό το μήνυμα εμφανιζόταν αλλά σε πιο κάτω σημείο του κώδικα άλλαζαν τα headers και γινόταν ψιλομπάχαλο. (Δεν μπορούσε να αλλάξει τα headers αφού είχε ήδη εμφανίσει html κείμενο - το κείμενο με το error)

Δημοσ.

Χμ.. ενδιαφέρον.. thanx.. αν και εδώ δεν μπορώ να το χρησιμοποιήσω (είναι γραμμένα τα script files και εγώ απλά τα modάρω) αλλα στο μέλλον θα μου φανεί χρήσιμο πιστεύω ;)

Δημοσ.

koita kai gramena na einai efoson ta kanei ola ayta include ena arxeio to index.php kai genikotera an oxi ayto opoiodhpote allo master file, mporeis na grafeis ton kodika ayton se ola ta master files sou :D (prosoxh omos oxi sta include files mono sta master kai na mhn yparxei tipota prin apo tpo ob_start.

Δημοσ.

 

if($fs == "true") {

do this;

} else {

die("i can't connect server seems to be down");

}

 

 

Aυτό ομολογώ οτι δεν το κατάλαβα.

Anyway το if ($fs === TRUE) λογικά πρέπει να παίζει :)

Γενικά για mixed vars που το 0 δεν σημαινει απαραίτητα false, πρεπει να χρησιμοποιούνται οι operators === και !==

Δημοσ.

@httpd :

 

den exo asxolhthei apo socets :P alla ap' oti blaipo sto manual den leei pouthena pos epistrefei true se periptosh pou leitourgei paramono false se periptosh pou den leitourghsei opote kalo tha htan na exoume ton kodika etsi:

>
if($fs === false) {
   // to mhnhma sfalmatos mas
} else {
   // oi prakseis mas
}

 

episeis na anafero pos to TRUE kai to FALSE einai boolean type opote den einai sosto na to exoume se quotes hte single hte double

 

episeis o telesths(operator) ==(equal to) elenxei an kati periexei kati to opoio tou orisame

eno o telesths(operator) ===(identical) elenxei an kati periexei kati to opoio tou orisame kai ayto to opoio tou orisame einai idios typos me to kati

px:

>
<?php

$foo = "1";

if ($foo == 1) { 
print ("TRUE");
} else {
print ("FALSE");
}

// Emfanizei TRUE gia ton logo oti to $foo periexei thn timi 1

print ("<hr>");

if ($foo === 1) { 
print ("TRUE");
} else {
print ("FALSE");
}

// Emfanizei FALSE gia ton logo oti to 1 den einai idios typos me to $foo asxeta an to $foo periexei thn timi 1

?>

Δημοσ.

Δεν κοίταξα στο manual να δω πως ακριβώς συντάσεται και τι επιστρέφει. Εγώ πιάστηκα με τα λεγόμενα του φίλου.

 

If the call fails, it will return FALSE and if the optional errno and e ..................

 

 

Οσο για το true - false boolean έχεις δίκιο εγώ εκείνη την στιγμή έκανα assing TRUE value σε μια μεταβλητή σε ένα project Που δούλευα και τα έκανα *ουνι καπέλο!! :/

 

My 2 cents

Δημοσ.

:P lool no problem! :D

eksalou kai ego apo to manual meta eida ti epistrefei, den mporoume na gnorizoume ta panta eksalou idios an den exoume asxolhthei me ayta! :D

eilhkrina den mou xreiastike pote h fsockopen, xoris omos ayto na thn kathista axrhsh function - tipota den einai axrhsto ola exoun logo yparkseis - to anafero gia na mhn pareksighthei kaneis ;)

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...