Avatar billede cot Nybegynder
15. juli 2008 - 15:34 Der er 16 kommentarer og
1 løsning

Søge efter billede på en side

Hej

Jeg har prøvet det her spørgsmål før, men den gang gik det ikke helt godt (Sorry til nielle og olebole, og tak for at i prøvede at hjælpe) Jeg lukkede dengang spørgsmålet, men  nu prøver jeg igen...

Jeg vil gøre sådan at jeg tjekke en side igennem om et bestemt billede er der på den, hvis det er det. Så skal den side gemmes i en db (Mysql)

Siden er login beskyttet, jeg har self. username og password...

Det er mange sider der skal tjekkes igennem, en url er sådan her: http://xx.xxxxx.dk/karte.php?d=305696&c=d8 (det der kommer efter karte.php? variere hele tiden)

Men nu er spørgsmålet så, hvordan får jeg scannet, de ca 640000 url'er igennem, og gemt det i en DB?

//cot

P.s. jeg ved godt det her er en af de større, og det kommer nok til at tage noget tid, så jeg ville da være glad hvis vi kunne klare det over msn i stedet... (min: jenser12[at]hotmail.com)
Avatar billede w13 Novice
15. juli 2008 - 15:37 #1
Hvordan vil du fortælle koden, hvilke url'er det drejer sig om?

Dvs. ligger de på din server og er det så bare "alle sider på serveren", som skal scannes?
Eller er det links, der er fordelt over internettet, for så skal du jo have en liste over alle disse 640.000 url'er, og det kan godt komme til at tage dig lidt tid at skrive den, går jeg ud fra. =)
Avatar billede cot Nybegynder
15. juli 2008 - 15:45 #2
hehe det er en anden side de ligger på, alle URL'erne er som den... Nej jeg tror jeg vil forenkle det hele med at tage og sige at siderne er sådan her: http://xx.xxxxxx.dk/karte.php?z=123456 (tallene fra 1 - 640001)...

Det kan jeg jo bare køre i en while loop med alle tallene det er ikk problemet...

Men problemet er at tjekke alle siderne, og få lagt det i en db...

Fordi når der er login-beskyt. på, så er det jo ikk php der skal være i brug eller er det?

Kan det være en offline applikation eller?

//Cot
Avatar billede w13 Novice
15. juli 2008 - 16:04 #3
Men Karte.php?d=xx&c=xx henter vel noget fra en database eller hvad? Ville det ikke være lettere at løbe denne database igennem?
Avatar billede cot Nybegynder
15. juli 2008 - 16:06 #4
jeg har ikk adgang til den database desværre...

Jeg skal gøre sådan at jeg ser hvad der er på siderne og hvis der et bestemt billede der, så skal det gemmes i Mysql db'en...

Men jeg har hørt noget om perl + Curl, men det kan jeg ikk finde ud af at lære jeg har kigget rundt omkring på tutorials...
Avatar billede jakobdo Ekspert
15. juli 2008 - 17:04 #5
Du kan sagtens lave det via php.
Du laver en post med brugernavn og kodeord, og så gemmer du session id.
Så laver du en get mod det forskellige sider, hvor du så sender session id med hver gang.
Det er piece of cake.
Avatar billede cot Nybegynder
15. juli 2008 - 20:06 #6
kan man godt gøre det når siderne ikk ligger på min server/webhotel?
Avatar billede jakobdo Ekspert
15. juli 2008 - 21:53 #7
Jep.
Uden at ville give dig en fuld løsning, så kan du logge ind via: http://dk.php.net/fsockopen
Prøv dig lidt frem og jeg er her til at guide.
Avatar billede cot Nybegynder
16. juli 2008 - 06:47 #8
Okay mange tak! :D

Jeg vil prøve mig lidt frem så.
Avatar billede cot Nybegynder
16. juli 2008 - 07:16 #9
Jeg er lidt forvirret med hvad den her funktion gør, jeg synes kun det virker som om den får data om serveren (Tid, dato, server), da jeg kopierede dette eksempel fra php.net:
<?php
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
    echo "$errstr ($errno)<br />\n";
} else {
    $out = "GET / HTTP/1.1\r\n";
    $out .= "Host: www.example.com\r\n";
    $out .= "Connection: Close\r\n\r\n";

    fwrite($fp, $out);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}
?>


Kom dette:
HTTP/1.1 403 Forbidden Date: Wed, 16 Jul 2008 05:13:04 GMT Server: Apache Content-Length: 268 Connection: close Content-Type: text/html; charset=iso-8859-1

Kan du lede mig lidt hen af hvordan jeg får den her funktion til at virke til mine behov?

På forhånd tak
Cot
Avatar billede jakobdo Ekspert
16. juli 2008 - 08:14 #10
Du skal ikke bruge GET men POST
Avatar billede cot Nybegynder
16. juli 2008 - 08:35 #11
Ok
Skal jeg så ændre i det den skal poste?

Der skal jo være noget med username og password ikke?

Men hvad jeg skal skrive kan jeg ikke se, der skal vel sættes nogel cookies eller sessions ikke?
Avatar billede jakobdo Ekspert
16. juli 2008 - 08:42 #12
Øv, det er bare op ad bakke hele vejen... :o)
Avatar billede jakobdo Ekspert
16. juli 2008 - 08:42 #13
Det link du har fået, prøv at kig på den funktion der hedder doPost
Den tror jeg du kan bruge som udgangspunkt.
Avatar billede cot Nybegynder
16. juli 2008 - 08:53 #14
Okay, ja jeg er lidt noob, men jeg har bare aldrig rigtig arbejdet med fil-delen af PHP før...

Jeg har mest lave webdesigns, men er så gået over til mere programmering, men jeg sætter meget pris på din hjælp :D
Avatar billede cot Nybegynder
16. juli 2008 - 09:08 #15
Jeg prøver og prøver, men det her er simpelthen lidt svært for mig...

Jeg aner ikke hvad jeg skal skrive at den skal poste :S

Jeg går ud fra at det er det her du mente:

...
function doPost($uri,$postdata,$host){
        $da = fsockopen($host, 80, $errno, $errstr);
        if (!$da) {
            echo "$errstr ($errno)<br/>\n";
            echo $da;
        }
        else {
            $salida ="POST $uri  HTTP/1.1\r\n";
            $salida.="Host: $host\r\n";
            $salida.="User-Agent: PHP Script\...

Eller er jeg forkert på den igen?
Avatar billede jakobdo Ekspert
17. juli 2008 - 12:45 #16
Lavede en løsning ala:

<?php
//http://www.eksperten.dk/spm/838385

function sendData($method,$host,$url,$data,$cookie=array()){
   
    $out  = $method . " " . $url . " HTTP/1.1\r\n";
    $out .= "Host: $host\r\n";
    if($method == 'POST'){
        $out .= "User-Agent: PHP Script\r\n";
        $out .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $out .= "Content-Length: ".strlen($data)."\r\n";
    }
    if(is_array($cookie) && count($cookie)>0){
        $out .= "Cookie: ".$cookie['name']."=".$cookie['value']."\r\n";
    }
    $out .= "Connection: close\r\n\r\n";
    if(isset($data) && $method == 'POST'){
        $out .= $data;
    }

    //echo $out . '<hr />';

    $fp = fsockopen($host, 80);
    if($fp) {
        fwrite($fp, $out);
        while (!feof($fp)) {
            $buffer .= fgets($fp, 128);
        }
        fclose($fp);
        return $buffer;
    }else{
        return false;
    }
}

function getCookie($str){
    return preg_match('/Set-Cookie:\s(.+?)=(.+?);\s/', $str, $match) ? array('name' => $match[1], 'value' => $match[2]) : false;
}

function getHeaderResponse($str){
    return preg_match('/^(.+?)\r\n\r\n/s', $str, $match) ? $match[1] : false;
}

function getKarteLinks($str){
    return preg_match_all('/karte\.php\?d=\d{6}&c=[0-9a-z]{2}/', $str, $match) ? $match : false;
}

function getInfo($str){
    return preg_match('%<div\sclass="ddb">&nbsp;\((.+?)\)&nbsp;</div></h1></div><div\sclass="dname\sc"><br><br>.+?</div><div\sid="(.+?)"></div>%', $str, $match) ? $match : false;
}

$links = array();

//Logger ind...
$ret = sendData('POST','speed.travian.it','/dorf1.php','login='.time().'&ef67df1=BRUGERNAVN&e80f46a=KODEORD&eb71892=');
//Fanger cookie
$cookie = getCookie($ret);
//Viser os kort X=1 og Y=1
//$ret = sendData('POST','speed.travian.it','/karte.php','xp=1&yp=1',$cookie);
//Fanger links
//$temp = getKarteLinks($ret);
//Samler alle links i et array
//$links = array_merge($links,$temp[0]);
$ret = sendData('POST','speed.travian.it','/karte.php?d=400003&c=72',NULL,$cookie);
$info = getInfo($ret);
echo 'Link : /karte.php?d=400003&c=72<br />';
$coordinates = explode('|',$info[1]);
echo 'X : ' . $coordinates[0] . '<br />';
echo 'X : ' . $coordinates[1] . '<br />';
echo '<img src="http://speed.travian.it/img/un/g/'.$info[2].'.jpg" />';
//print_r($info);
//echo '</pre>';

?>
Avatar billede jakobdo Ekspert
17. juli 2008 - 12:48 #17
Takker for point.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester