Autor Zpráva
Petr20
Profil *
Potřebuji několikrát načíst do proměné nějaké soubory a uložit určitou část z nich do databáze.

K načtení používám funkci file_get_contents('adresa'), ale je to hrozně pomalé. Naznáte nějaké rychlejší načítání obsahu do proměnné? Např. načíst jenom kus.
vertigo4
Profil
Petr20
jinak to nejde... nejdřív musíš načíst celek a pak z toho vybírat... s tím nic nenaděláš
Petr20
Profil *
A ještě mi tahle funkce občas hlásí failed to open stream: HTTP request failed! HTTP/1.0 200 OK in , čím to je?
vertigo4
Profil
Petr20
a nemáš ty stránky na freehostingu? tam většinou myslím zakazují tahání kódu z cizích domén
Acci
Profil
A jedná se o soubory načítané z disku nebo nějaké jiné pomocí HTTP protokolu?
Petr20
Profil *
Jiné pomocí HTTP protokolu.
Petr20
Profil *
vertigo4
mám je na localhostu.
Acci
Profil
Pak se podiv po funkci fsockopen, která je rychlejší než file_get_contents a navíc nemusíš stahovat celý soubor, ale například jen potřebnou část.
Petr20
Profil *
To mi vypsalo: Warning: fsockopen(): php_network_getaddresses: gethostbyname failed

$obsah=fsockopen("http://www.neco.cz/?&a=".$jmeno_bez_diakritiky."doSe lect=2", 80, $errno, $errstr, 30);
nightfish
Profil
http://www.neco.cz/?&
řekl bych, že to http:// a pak všechno od dalšího / tam nemá co dělat
doporučuji nastudovat HTTP protokol
a nebo se podívat na příklady na stránce fsockopen v manuálu php - http://cz.php.net/fsockopen
Petr20
Profil *
nightfish
když tam nedám to http:// tak je to stejné. To další tam musí být.
Acci
Profil
Nejde to tak jednoduše, jako u funkce file_get_contents, tahle je mnohem na nižší úrovni, tím ovšem získáš ten tvůj kýžený vyšší výkon a můžeš si stáhnout jen tolik dat, kolik budeš potřebovat.
$fp = fsockopen ("www.neco.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br>\n";
} else {
    fputs ($fp, "GET /?a=".$jmeno_bez diakritiky."doSelect=2 HTTP/1.0\r\nHost: www.example.com\r\n\r\n");
    while (!feof($fp)) {
        echo fgets ($fp,128);
    }
    fclose ($fp);
}
Petr20
Profil *
Acci
Moc děkuji. Ještě se zeptám jak pak mohu např. řádek 82 uložit do proměnné ($obsah)

To už je poslední. Děkuji za pomoc
Acci
Profil
Tak například můžeš v tom cyklu while načítat postupně zdrojový soubor do proměnné obsah a počítat počet řádků (tedy hledat v té proměnné počet výskytů znaku "\n") a pokud jich tam bude více než 82, ukončíš spojení a a vhodným způsobem vybereš vhodný řádek popřípadě můžeš použít jednodušší způsob a to, že u funkce fgets použiješ vyšší počet přečtených bajtů (tedy třeba 4096) a budeš počítat počet průchodů cyklem a pokud se bude rovnat 82, tak obsah uložíš do potřebné proměnné a ukončíš spojení.
d.b.cooper
Profil *
zajímalo by mě jestli jde po spojení

$fp = fsockopen ("www.neco.com", 80, $errno, $errstr, 30);

který trvá nejdýl měnit get

fputs ($fp, "GET /?a=".$jmeno_bez diakritiky."doSelect=2 HTTP/1.0\r\nHost: www.example.com\r\n\r\n");

a tím načíst více podstránek na jedné doméně s jedním spojením

tady je kód co sem zkoušel

$
$fp = fsockopen ("www.neco.com", 80, $errno, $errstr, 30);
        
        foreach($array as $ind => $row) {        
            
            
            $file = "";
            
            if (!$fp) {
                echo "$errstr ($errno)<br>\n";
            } else {
                
                fputs ($fp, "GET /?a=".$row." HTTP/1.0\r\nHost: www.neco.com\r\n\r\n");

                
                $endRow = 0;
                while (!feof($fp)) {
                    
                    if($endRow == 100) {                                                   
                          break;                       
                    }  
                    
                    $rowFp = fgets ($fp,128);                   
                    $file .= $rowFp;
                    echo htmlspecialchars($rowFp)."<br />";
                    
                    $endRow++;
                }
                
            }   

            /*kod na zpracovani zdrojaku*/
           
        }
        
        fclose ($fp)

testoval sem to ale mam pocit že to ani ten get nebere v potaz tak nevim jestli mi to pomůže a mam to zkoušet dál každopádně bych musel nějak resetovat to co je ve whilu protože mi to nejde po druhym průchodu foreachem od začátku zdrojáku

pokud sem dal do foreache i spojení a ukončení spojení opakovat trvalo to vše stejně (dýl ... ) než s file_get_contents() takže by to ani nemělo smysl nahrazovat

máte s tím někdo zkušenosti ?

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: