Ερώτηση για εντολή fetch

Σε αυτή την περιοχή μπορείτε να βρείτε ή να αναζητήσετε πληροφορίες σχετικές με την PHP

Συντονιστές: WebDev Moderators, Super-Moderators, PHP Moderators

Απάντηση
Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cdhyper » 18 Σεπ 2008 19:27

Έχω αυτή την εντολή (υποθετικό το domain):
file_get_contents('http://www.in.gr');

Αυτή η εντολή κάνει fetching ό,τι βρει στη διεύθυνση www.in.gr. Μετά εγώ αποθηκεύω αυτό το περιεχόμενο και το χρησιμοποιώ για κάποιο λόγο στην εφαρμογή μου. Ωστόσο έχω παρατηρήσει αρκετές φορές ότι το fetching ΔΕΝ ανακτά ολόκληρη τη σελίδα (πχ στο συγκεκριμένο παράδειγμα το www.in.gr) και σταματά σε μια τυχαία περιοχή της html με αποτέλεσμα η σελίδα να φαίνεται μισοφορτωμένη στην αποθήκευσή μου.

Αυτή η εντολή τρέχει κάθε 20-30 λεπτά και σε ένα 5% των προσπαθειών μισοφορτώνει.

Γιατί να μην φορτώνει ολόκληρη τη σελίδα; Υπάρχει κάποιο timeout που μπορώ να ρυθμίσω στον apache ώστε να μην κόβει τη φόρτωση της σελίδας ώστε να αποθηκεύεται πάντα σωστά τοπικά; Υπάρχει κάτι άλλο που μπορώ να σκεφτώ;

Υπόψη: το fetching είναι για σελίδα που βρίσκεται locally στον ίδιο server.
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από Basilakis » 18 Σεπ 2008 21:17

Κώδικας: Επιλογή όλων

<?php
$ctx = stream_context_create&#40;array&#40;
    'http' => array&#40;
        'timeout' => 1
        &#41;
    &#41;
&#41;;
file_get_contents&#40;"http&#58;//example.com/", 0, $ctx&#41;;
?>
Δοκίμασε αυτό, setarwntas το timeout εσύ ατόματα, για να μην κάνει expire μόνο του...

Τώρα υπάρχει και θέμα κωδικοποίησης αλλά φαντάζομαι τα πέρνεις σωστά τα data...

Όσο για το timeout ΜΠΟΡΕΙ να είναι προρυθμιζμένο στο apache σου, αλλά πέρνεις error message;

Edited:

Τσέκαρε εάν το allow_url_fopen είναι enabled στο php.ini

Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cdhyper » 18 Σεπ 2008 21:19

Το 1 μπορώ να το βάλω και 50 ας πούμε; Θα περιμένει τόσο ή θα το αγνοήσει;
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από Basilakis » 18 Σεπ 2008 21:24

Θα περιμένει... Αυτός είναι ο σκοπός του :D

Εάν δεν δουλέψει έτσι δοκίμασετο και

Κώδικας: Επιλογή όλων


<?php

set_time_limit&#40;10&#41;;

print file_get_contents&#40;"http&#58;//www.example.com"&#41;;

?>


Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cdhyper » 18 Σεπ 2008 21:28

on είναι το allow_url_fopen
θα δοκιμάσω αυτά που μου λες και θα σου πω.
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cdhyper » 18 Σεπ 2008 21:58

Μπα τίποτα, ακόμα δεν φορτώνει σωστά και σταματάει τη φόρτωση όπου του κατέβει, σε τυχαία σημεία. Να δω μήπως φταίει τίποτα άλλο.
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

Άβαταρ μέλους
Basilakis
PHP Moderator
Δημοσιεύσεις: 8574
Εγγραφή: 17 Νοέμ 2003 13:03
Τοποθεσία: Womans' Brain
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από Basilakis » 18 Σεπ 2008 22:08

Μήπως γίνεται exausted το memory?

Άβαταρ μέλους
cdhyper
Literature Moderator
Δημοσιεύσεις: 9707
Εγγραφή: 23 Ιουν 2001 03:00
Τοποθεσία: Φωτονερόπετρα
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cdhyper » 18 Σεπ 2008 22:14

Ποιο memory; Τα 12GB;
Σύγκριση τιμών Supermarket: http://www.shopnsave.gr
Νέα Ιταλικα επιπλα κουζινας
Για φιλοσόφους: http://filosofia.gr και http://liantinis.org

Άβαταρ μέλους
cpulse
Script Master
Δημοσιεύσεις: 1527
Εγγραφή: 21 Μαρ 2006 19:30
Τοποθεσία: Αθήνα village
Επικοινωνία:

Ερώτηση για εντολή fetch

Δημοσίευση από cpulse » 18 Σεπ 2008 23:15

Μπορεί ο server να είναι υπερφοτωμένος, ή μπορεί να μην δίνει πολύ σημασία στα requests που έχουν για agent κάτι που δεν είναι browser.

Για δοκίμασε με ένα λίγο ποιο manual τρόπο..

Κώδικας: Επιλογή όλων

$domain = 'www.example.com';
$url = '/';

$fp = fsockopen&#40;$domain, 80, $errno, $errstr, 30&#41;;
if &#40;!$fp&#41; &#123;
   echo "$errstr &#40;$errno&#41;<br />\n";
&#125; else &#123;
   $out = "GET $url HTTP/1.1\r\n";
   $out .= "Host&#58; $domain\r\n";
   $out .= "User-Agent&#58; Mozilla/5.0 &#40;X11; U; Linux i686; en-US; rv&#58;1.9.0.1&#41; Gecko/2008072820 Firefox/3.0.1\r\n";
   $out .= "\r\n";

   fwrite&#40;$fp, $out&#41;;
   $contents = '';
   while &#40;!feof&#40;$fp&#41;&#41; &#123;
       $contents .= fgets&#40;$fp, 128&#41;;
   &#125;
   fclose&#40;$fp&#41;;

   echo $contents;
&#125;
Μόνο προσοχή στις παραμέτρους $domain και $url. Στο $domain βάλε μόνο το domain και στο $url από το slash και ότι άλλο ακολουθεί.

Απάντηση

Επιστροφή στο “PHP Προγραμματισμός”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες