παπι Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 Εστω οτι εχω ενα php "προγραμμα" το οποιο αντλει δεδομενα απο καπου. Η διαδικασια λογικα θα ειναι σε infinity loop, πως μπορω εγω να "επεμβω" απο αλλο php αρχειο (στο ιδιο σερβερ) ωστε να σταματησω το loop; πχ > <?php whlie(1) { do somthing if(!isRunnging()) break; } ?> Εγω σκεφτομαι, να φτιαξω ενα table (sql) με ενα row το οποιο θα παιζει το ρολο της σημαιας και η isRunning να εχει ενα select το οποιο θα βλεπει διαβαζει το row κλπ κλπ. υπαρχει κατι πιο απλο;
spartakoscs Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 την > foreach($data as $row){ do something } την ξέρεις ? γιατί δεν μου φαίνεται λογικό αυτό που θες να κάνεις …
hawkpilot Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 Εστω οτι εχω ενα php "προγραμμα" το οποιο αντλει δεδομενα απο καπου. Η διαδικασια λογικα θα ειναι σε infinity loop, πως μπορω εγω να "επεμβω" απο αλλο php αρχειο (στο ιδιο σερβερ) ωστε να σταματησω το loop; πχ > <?php whlie(1) { do somthing if(!isRunnging()) break; } ?> Εγω σκεφτομαι, να φτιαξω ενα table (sql) με ενα row το οποιο θα παιζει το ρολο της σημαιας και η isRunning να εχει ενα select το οποιο θα βλεπει διαβαζει το row κλπ κλπ. υπαρχει κατι πιο απλο; Βάσει της ίδιας λογικής που ανέφερες, μπορείς να τσεκάρεις για την ύπαρξη κάποιου αρχείου στον web server. Πχ ανεβάζεις (upload) το αρχείο stop.txt στον κατάλογο /uploads του site σου. Το php script πρέπει να τσεκάρει την ύπαρξη ή μη του αρχείου για να αποφασίσει αν θα συνεχίσει να εκτελείται ή όχι. Αν βρει το αρχείο, το διαγράφει και σταματά την εκτέλεση. Από περιέργεια, γίνεται να έχεις ένα php που να εκτελείται επ' άπειρον? Δεν υπάρχει κάποια global μεταβλητή που ορίζει τον max χρόνο εκτέλεσης?
παπι Δημοσ. 7 Ιουνίου 2012 Μέλος Δημοσ. 7 Ιουνίου 2012 Ειναι κατι σαν service. Δε με λετε, υπαρχει τροπος να δω αν καποιο php εχει μπει σε infinity loop;
spartakoscs Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 Από περιέργεια, γίνεται να έχεις ένα php που να εκτελείται επ' άπειρον? Δεν υπάρχει κάποια global μεταβλητή που ορίζει τον max χρόνο εκτέλεσης? > php.ini -> max_execution_time και πως να το παραβλέψεις link
Uberalles_gr Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 Θες να μας πεις τι έχεις στο μυαλό σου να κάνεις μήπως μπορέσουμε και σε βοηθήσουμε περισσότερο;
thanocaster Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 Η αλήθεια είναι πως κατά 99% αυτό που πας να κάνεις είναι λάθος ή bad practice.
hawkpilot Δημοσ. 7 Ιουνίου 2012 Δημοσ. 7 Ιουνίου 2012 > php.ini -> max_execution_time και πως να το παραβλέψεις link Χα... έπρεπε να το φανταστώ... Η αλήθεια είναι πως κατά 99% αυτό που πας να κάνεις είναι λάθος ή bad practice. +1
x_maras Δημοσ. 8 Ιουνίου 2012 Δημοσ. 8 Ιουνίου 2012 Ειναι κατι σαν service Αν έχω μαντέψει σωστά θέλεις να φτιάξεις ένα real time application. Έχεις ένα service π.χ. live score του Euro 2012 και θέλεις να checkάρεις για ανανεώσεις κάθε δευτερόλεπτο (υποθετικά). Αν ναι δες εδώ ένα παράδειγμα long polling. Στη συνέχεια ρίξε μια ματιά στο socket.io Επίσης μπορείς να κοιτάξεις και για κάποιο pubsub μηχανισμό όπου ειδοποιήσαι όταν υπάρχει κάτι νέο. Δες το xmpp pubsub Γράφω ένα live stream σαν μέρος ενός project αυτό το καιρό με το pubsub της Redis που είναι απίστευτα εύκολο, αλλά θα πρέπει φυσικά να χρησιμοποιήσεις τη redis κάπου στην εφαρμογή σου. Αν τώρα το service είναι σε foreign host ... δες ή ρώτα τους αν έχουν κάποιο subscription (λογικά δε θα έρχεται δωρεάν). Το να έχεις κάποιο infinite loop σε php, ακόμη κι αν δουλέψει αποδοτικά για την εφαρμογή σου (που αμφιβάλω) πιστεύω ότι θα το blockαρει o sys admin του server του service...
παπι Δημοσ. 8 Ιουνίου 2012 Μέλος Δημοσ. 8 Ιουνίου 2012 Εχω ενα προγραμμα που τρεχει στο pc μου. (γραμμενο σε c++/win32) Αυτο που κανει ειναι να στελνει πακετα καθε χ χρονο. Δεν με ενδιαφερει η απαντηση απο την αποστολη, με νιαζει μονο να τα στειλω. Επειδη για να τρεχει αυτο το προγραμμα θα πρεπει να ειναι ανοικτο το πισι μου, θελω να το ξαναγραψω σε php και να το ανεβασω σε εναν free host για να μην εχω ανοικτο το πισι. socket δεν θελω, εφοσον το εχω κανει σε winhttp και αποτι βλεπω στη php υπαρχει αντιστοιχο api (curl). Το θεμα μου ειναι, πως μπορω να κανω emulate -να το πω- στην php ενα process οπως στα windows. Δηλαδη να εχω μια σελιδα που να παιζει το ρολο του desktop και μια αλλη το ρολο του προγραμματος.
x_maras Δημοσ. 8 Ιουνίου 2012 Δημοσ. 8 Ιουνίου 2012 ουπς έπεσα τελείως έξω. Ίσως με cron job?? Θα πρέπει όμως να δεις αν μπορείς να το κάνεις στο free host που είσαι.
hawkpilot Δημοσ. 8 Ιουνίου 2012 Δημοσ. 8 Ιουνίου 2012 Εχω ενα προγραμμα που τρεχει στο pc μου. (γραμμενο σε c++/win32) Αυτο που κανει ειναι να στελνει πακετα καθε χ χρονο. Δεν με ενδιαφερει η απαντηση απο την αποστολη, με νιαζει μονο να τα στειλω. Επειδη για να τρεχει αυτο το προγραμμα θα πρεπει να ειναι ανοικτο το πισι μου, θελω να το ξαναγραψω σε php και να το ανεβασω σε εναν free host για να μην εχω ανοικτο το πισι. socket δεν θελω, εφοσον το εχω κανει σε winhttp και αποτι βλεπω στη php υπαρχει αντιστοιχο api (curl). Το θεμα μου ειναι, πως μπορω να κανω emulate -να το πω- στην php ενα process οπως στα windows. Δηλαδη να εχω μια σελιδα που να παιζει το ρολο του desktop και μια αλλη το ρολο του προγραμματος. Δεν υπάρχει περίπτωση σε free hosting να βρεις php execution time > 60 secs. Πρέπει να βρεις λύση με free hosting που να σου δίνει δυνατότητα χρήσης cron.
defacer Δημοσ. 10 Ιουνίου 2012 Δημοσ. 10 Ιουνίου 2012 Αυτό που λέει ο hawkpilot. Όσο για το πώς μπορείς να ανιχνεύσεις μια συνθήκη τερματισμού η οποία θα ενεργοποιείται "εξωτερικά": δεν υπάρχει εύκολος τρόπος. Αν το loop κρατάει ένα σεβαστό χρονικό διάστημα (ας πούμε όχι λιγότερο από 1 sec) θα μπορούσες να κάνεις κάτι με database ή με flat file ή με async socket και stream_select/socket_select γιατί ο φόρτος του ελέγχου δε θα ήταν μεγάλος μπροστά στην ολική διάρκεια του loop. Αν το loop είναι γρήγορο τότε η μόνη ημι-αξιοπρεπής λύση είναι με το semaphore extension το οποίο όμως δεν είναι standard (αποκλείεται σε shared host) και επίσης δεν υποστηρίζεται καν σε Windows. Γενικά αυτού του είδους οι δουλειές δεν γίνονται καλά σε PHP.
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα