Hallo,
Ik zit al een paar dagen vast met een raar probleem :S
De regex is zeker juist want de var_dump laat wel alles zien maar foreach laat maar 4-5 zien.
Wat doe ik fout? hieronder volgt de code;
Dus ja wat ik nu juist wil is van een andere site afbeeldingen ophalen, en die in database opslaan.PHP Code:
echo '<pre>';
var_dump($matches);
echo '</pre>';
$i = $i++;
foreach($matches as $i => $match)
{
echo '<br>' . $matches[1][$i];
echo ' ' . $matches[2][$i];
echo ' ' . $matches[3][$i];
echo ' ' . $matches[4][$i];
}
Hoeveel afbeeldingen er juist getoont worden op die andere site hangt vanaf hoeveel er toegevoegd worden... meestal is het rond de 30.
iemand die aub kan helpen?
- cURL laat niet alle resultaten zien...
-
31-01-2010, 12:29 #1
- Berichten
- 10
- Lid sinds
- 17 Jaar
cURL laat niet alle resultaten zien...
Laatst aangepast door Mahir L : 31-01-2010 om 17:14
-
-
31-01-2010, 14:04 #2
- Berichten
- 257
- Lid sinds
- 15 Jaar
Je doet in iedergeval iets vreemds;
Je zou in dat foreach statement niet verwachten dat je daarna nog iets met de variabele $matches doet rechtstreeks!
Daarnaast geef je net vóór het for each statement de variabele $i nog een waarde hetgeen zinloos is omdat het foreach statement dat daarna opnieuw zet.
Misschien kun je nog iets meer code laten zien? Onder andere waarmee de variabele $matches wordt gevuld.
-
31-01-2010, 14:10 #3
- Berichten
- 206
- Lid sinds
- 15 Jaar
Je volgorde gaat niet helemaal goed ; de $i in de foreach is tijdens de loop gelijk aan het eerste getalletje , dus de 1,2,3 en 4 die je print. Je zou dus eerder andersom moeten echo'en (echo $matches[$i][1] ).
Tevens begint een array in php met de index 0 en niet met de index 1, daarmee moet je ook rekening houden tijdens het printen.
-
31-01-2010, 14:30 #4
- Berichten
- 10
- Lid sinds
- 17 Jaar
Bedankt voor jullie antwoorden;
Dit is de complete code
PHP Code:<?php
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'http://site.com/');
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_REFERER, 'http://www.google.com/');
$pagina = curl_exec($ch);
curl_close($ch);
if(empty($page))
{
echo "Nothing!";
}
else
{
if(preg_match_all("/<td\salign=\"right\"[^>]*><a href=\"([^<]*)\"[^>]*><img src=\"([^<]*)\" [^>]*><\/a><br \/>([^<]*)-([^<]*)<\/td>/is", $page, $matches))
{
echo '<pre>';
var_dump($matches);
echo '</pre>';
$i = $i++;
foreach($matches as $i => $match)
{
echo '<br>' . $matches[1][$i];
echo '<br>' . $matches[2][$i];
echo '<br>' . $matches[3][$i];
echo '<br>' . $matches[4][$i];
}
}
PHP Code:<td align="right"><a href="http://www.google.be"><img src="be.jpg" /></a><br />google - be</td>
<td align="right"><a href="http://www.google.com"><img src="com.jpg" /></a><br />google - com</td>
<td align="right"><a href="http://www.google.nl"><img src="nl.jpg" /></a><br />google - nl</td>
<td align="right"><a href="http://www.google.de"><img src="de.jpg" /></a><br />google - de</td>
@Sylvia Trommer
In mijn geval laat array[0] alles zien, en [1] laat de link zien [2] laat de img zien [3]-[4] stukje text
Die paar resultaten dat er worden weergegeven zijn goed enkel niet alles wordt weergegeven. Ik kan het ook keurig in database opslaan...
Of begrijp ik u verkeerd?
@Ruud van der Velden
Tis idd vreemd in elkaar gestoken, ik ben nog redelijk nieuw in curl,
Heb de code die ik gebruik erbij gezet en wat er opgehaald moet worden
tzijn enkel geen 4 resultaten maar rond de 20-30 telkens
-
31-01-2010, 14:37 #5
- Berichten
- 257
- Lid sinds
- 15 Jaar
Maar wellicht moet je even het foreach statement begrijpen (link).
Misschien zou het dit moeten zijn:
Code:foreach($matches as $match) { echo '<br>' . $match[1]; echo '<br>' . $match[2]; echo '<br>' . $match[3]; echo '<br>' . $match[4]; }
En ik vermoed dat
Code:$pagina = curl_exec($ch);
Code:$page = curl_exec($ch);
Laatst aangepast door Ruud van der Velden : 31-01-2010 om 14:38 Reden: typo
-
31-01-2010, 15:18 #6
- Berichten
- 10
- Lid sinds
- 17 Jaar
PHP Code:array(5) {
[0]=>
array(4) {
[0]=>
string(95) "[IMG]http://dealergame.be/curl/be.jpg[/IMG]
google - be"
[1]=>
string(98) "[IMG]http://dealergame.be/curl/com.jpg[/IMG]
google - com"
[2]=>
string(95) "[IMG]http://dealergame.be/curl/nl.jpg[/IMG]
google - nl"
[3]=>
string(95) "[IMG]http://dealergame.be/curl/de.jpg[/IMG]
google - de"
}
[1]=>
array(4) {
[0]=>
string(20) "http://www.google.be"
[1]=>
string(21) "http://www.google.com"
[2]=>
string(20) "http://www.google.nl"
[3]=>
string(20) "http://www.google.de"
}
[2]=>
array(4) {
[0]=>
string(6) "be.jpg"
[1]=>
string(7) "com.jpg"
[2]=>
string(6) "nl.jpg"
[3]=>
string(6) "de.jpg"
}
[3]=>
array(4) {
[0]=>
string(7) "google "
[1]=>
string(7) "google "
[2]=>
string(7) "google "
[3]=>
string(7) "google "
}
[4]=>
array(4) {
[0]=>
string(3) " be"
[1]=>
string(4) " com"
[2]=>
string(3) " nl"
[3]=>
string(3) " de"
}
}
[IMG]http://dealergame.be/curl/com.jpg[/IMG]
google - com[IMG]http://dealergame.be/curl/nl.jpg[/IMG]
google - nl[IMG]http://dealergame.be/curl/de.jpg[/IMG]
google - de
http://www.google.comhttp://www.google.nlhttp://www.google.de
com.jpgnl.jpgde.jpg
google google google
com nl de
Zoals je kan zien alles klopt buiten die foreach denk ik...
Ik heb ook op die site gekeken...:s
Ik weet het echt niet meer
-
31-01-2010, 15:19 #7
- Berichten
- 1.053
- Lid sinds
- 17 Jaar
De regex is zeker juist want de var_dump laat wel alles zien maar foreach laat maar 4-5 zien
Je RegExp is voor verbetering vatbaar. "([^"]*?)" Lijkt me een betere match voor een attribuut bijv.
Totaal onduidelijk en onoverzichtelijk. Stel eens een duidelijke vraag met aanvullende informatie op.
-
31-01-2010, 17:13 #8
- Berichten
- 10
- Lid sinds
- 17 Jaar
Ik heb het veranderd zoals u zei ([^>]*) vervangen door ([^"]*?),
Maar niet met veel resultaat... :S
Dus ja wat ik nu juist wil is van een andere site afbeeldingen ophalen, en die in database opslaan.
Hoeveel afbeeldingen er juist getoont worden op die andere site hangt vanaf hoeveel er toegevoegd worden... meestal is het rond de 30.
-
31-01-2010, 19:10 #9
- Berichten
- 1.053
- Lid sinds
- 17 Jaar
Mahir, wat ik probeer te zeggen. Je regexp voor je attribuut zegt nu "alles, behalve een '>', maar voor een attribuut wil je alles tot de dubbelquote", dus da's niet helemaal correct. Geen idee waarom mijn voorbeeld niet werkt, misschien de '*?' even vervangen door een '+'.
Verder zeg je dat het request van Google komt, lijkt me sterk.
Je lus klopt ook van geen kant, de tip om te lezen wat foreach doet lijkt me handig. Je bedoelt waarschijnlijk binnen de lus iets als
foreach ($matches[0] as $i => $match)
{ echo $matches[1][$i];
// etc.
}
En zelfs dat maakt het niet echt logisch. Kijk eens naar je preg_match functie en welke extra opties je daar mee kunt geven om de resultaten te ordenen (andere structuur waardoor je wel logische lus op kunt zetten).
Je regexp is verder inderdaad niet het probleem hier, maar kan wel wat geoptimaliseerd worden. "Alles behalve" klopt het overal. Maar goed, als het maar voor 1 pagina is en het werkt, who cares.
-
31-01-2010, 20:17 #10
- Berichten
- 10
- Lid sinds
- 17 Jaar
Mahir, wat ik probeer te zeggen. Je regexp voor je attribuut zegt nu "alles, behalve een '>', maar voor een attribuut wil je alles tot de dubbelquote", dus da's niet helemaal correct. Geen idee waarom mijn voorbeeld niet werkt, misschien de '*?' even vervangen door een '+'.
Verder zeg je dat het request van Google komt, lijkt me sterk.
Je lus klopt ook van geen kant, de tip om te lezen wat foreach doet lijkt me handig. Je bedoelt waarschijnlijk binnen de lus iets als
foreach ($matches[0] as $i => $match)
{ echo $matches[1][$i];
// etc.
}
En zelfs dat maakt het niet echt logisch. Kijk eens naar je preg_match functie en welke extra opties je daar mee kunt geven om de resultaten te ordenen (andere structuur waardoor je wel logische lus op kunt zetten).
Je regexp is verder inderdaad niet het probleem hier, maar kan wel wat geoptimaliseerd worden. "Alles behalve" klopt het overal. Maar goed, als het maar voor 1 pagina is en het werkt, who cares.
Oh , bedankt voor deze mooie uitleg,
Ik zal eens preg_match functie bekijken, maja zoals ik al zei... cURL is iets nieuw voor me:D
Nogmaals bedankt, als ik er niet uitkom laat ik het weten.
-
31-01-2010, 20:33 #11
- Berichten
- 257
- Lid sinds
- 15 Jaar
Ik denk inderdaad dat, zoals Robert hierboven schrijft, het verstandig is om de flag PREG_SET_ORDER te gebruiken in je
Code:if(preg_match_all("...", $page, $matches,PREG_SET_ORDER))
Code:foreach($matches as $match) { echo '<br>' . $match[1]; echo '<br>' . $match[2]; echo '<br>' . $match[3]; echo '<br>' . $match[4]; }
-
31-01-2010, 20:38 #12
- Berichten
- 10
- Lid sinds
- 17 Jaar
Ik denk inderdaad dat, zoals Robert hierboven schrijft, het verstandig is om de flag PREG_SET_ORDER te gebruiken in je
Code:if(preg_match_all("...", $page, $matches,PREG_SET_ORDER))
Code:foreach($matches as $match) { echo '<br>' . $match[1]; echo '<br>' . $match[2]; echo '<br>' . $match[3]; echo '<br>' . $match[4]; }
aiaiaiaiaia,eindelijk, zo simpel was het dus xD,
Dankzij jullie heb ik weer wat bijgeleerd...
Bedankt!!
Plaats een
- + Advertentie
- + Onderwerp
Marktplaats
Webmasterforum
- Websites algemeen
- Sitechecks
- Marketing
- Domeinen algemeen
- Waardebepaling
- CMS
- Wordpress
- Joomla
- Magento
- Google algemeen
- SEO
- Analytics
- Adsense
- Adwords
- HTML / XHTML
- CSS
- Programmeren
- PHP
- Javascript
- JQuery
- MySQL
- Ondernemen algemeen
- Belastingen
- Juridisch
- Grafisch ontwerp
- Hosting Algemeen
- Hardware Info
- Offtopic