Autor | Zpráva | ||
---|---|---|---|
Petr20 Profil * |
#1 · Zasláno: 24. 2. 2008, 16:53:21
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 |
#2 · Zasláno: 24. 2. 2008, 16:58:00
Petr20
jinak to nejde... nejdřív musíš načíst celek a pak z toho vybírat... s tím nic nenaděláš |
||
Petr20 Profil * |
#3 · Zasláno: 24. 2. 2008, 17:24:58
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 |
#4 · Zasláno: 24. 2. 2008, 17:26:31
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 |
#5 · Zasláno: 24. 2. 2008, 17:27:19
A jedná se o soubory načítané z disku nebo nějaké jiné pomocí HTTP protokolu?
|
||
Petr20 Profil * |
#6 · Zasláno: 24. 2. 2008, 17:27:54
Jiné pomocí HTTP protokolu.
|
||
Petr20 Profil * |
#7 · Zasláno: 24. 2. 2008, 17:28:31
vertigo4
mám je na localhostu. |
||
Acci Profil |
#8 · Zasláno: 24. 2. 2008, 17:31:30 · Upravil/a: Acci
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 * |
#9 · Zasláno: 24. 2. 2008, 17:52:54
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 |
#10 · Zasláno: 24. 2. 2008, 18:25:48 · Upravil/a: nightfish
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 * |
#11 · Zasláno: 24. 2. 2008, 21:37:32
nightfish
když tam nedám to http:// tak je to stejné. To další tam musí být. |
||
Acci Profil |
#12 · Zasláno: 24. 2. 2008, 22:36:41
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 * |
#13 · Zasláno: 25. 2. 2008, 16:15:42
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 |
#14 · Zasláno: 27. 2. 2008, 22:54:19
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í.
|
||
Časová prodleva: 4 roky
|
|||
d.b.cooper Profil * |
#15 · Zasláno: 14. 8. 2012, 00:43:30
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 ? |
||
Časová prodleva: 12 let
|
0