bij het gebruik van fopen krijg ik volgende foutmeldingen:

Warning: fopen() [function.fopen]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Site\HSC\frameset\admin\populate.php on line 46

Warning: fopen(http://www.haco.com/index.php) [function.fopen]: failed to open stream: No error in C:\Site\HSC\frameset\admin\populate.php on line 46


Warning: fgets(): supplied argument is not a valid stream resource in C:\Site\HSC\frameset\admin\populate.php on line 50

Warning: fclose(): supplied argument is not a valid stream resource in C:\Site\HSC\frameset\admin\populate.php on line 85


dir is mijn code:

<?php
/*
* populate.php
*
* Script for populating the search-database with words,
* pages and word-occurences.
*/
/* Connect to the database: */
ini_set('display_errors', 1); // 0 = uit, 1 = aan 
error_reporting(E_ALL); 

/*mysql_pconnect("localhost","root","Tamara:19;75")
    or die("ERROR: Could not connect to database!");
mysql_select_db("HSC");*/

include '../../includes/connect.php';
/* Define the URL that sould be processed: */
$url = $_GET['url'];
echo $url;
echo "<br>";
if( !$url )
{
    die( "You need to define a URL to process." );
}
else if( substr($url,0,7) != "http://" )
{
    $url = "http://$url";
}
/* Does this URL already have a record in the page-table? */
$result = mysql_query("SELECT page_id FROM page WHERE page_url = \"$url\"");
$row = mysql_fetch_array($result);
if( $row['page_id'] )
{
    /* If yes, use the old page_id: */
    $page_id = $row['page_id'];
	
}
else
{
    /* If not, create one: */
    mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")");
    $page_id = mysql_insert_id();
	
}
/* Start parsing through the text, and build an index in the database: */
$fd = fopen($url,"r");

while( $buf = fgets($fd,1024) )
{
    /* Remove whitespace from beginning and end of string: */
    $buf = trim($buf);
    /* Try to remove all HTML-tags: */
    $buf = strip_tags($buf);
    $buf = ereg_replace('/&\w;/', '', $buf);
    /* Extract all words matching the regexp from the current line: */
    preg_match_all("/(\b[\w+]+\b)/",$buf,$words);
    /* Loop through all words/occurrences and insert them into the database: */
    for( $i = 0; $words[$i]; $i++ )
    {
        for( $j = 0; $words[$i][$j]; $j++ )
        {
            /* Does the current word already have a record in the word-table? */
            $cur_word = strtolower($words[$i][$j]);
            $result = mysql_query("SELECT word_id FROM word WHERE word_word = '$cur_word'");
            $row = mysql_fetch_array($result);
            if( $row['word_id'] )
            {
                /* If yes, use the old word_id: */
                $word_id = $row['word_id'];
            }
            else
            {
                /* If not, create one: */
                mysql_query("INSERT INTO word (word_word) VALUES (\"$cur_word\")");
                $word_id = mysql_insert_id();
            }
             /* And finally, register the occurrence of the word: */
            mysql_query("INSERT INTO occurrence (word_id,page_id) VALUES ($word_id,$page_id)");
            print "Indexing: $cur_word<br>";
        }
    }
}
fclose($fd);
?>


Ehm de error is best duidelijk hoor...
Waarom zet je er http://..... voor als het je server is? Wil je de pagina openen als bezoeker of als script? Dus met de output met http request of de bron?

Als je de bron wil hebben, gebruik dan file_get_contents(), als je het resultaat van een script wil hebben, gebruik dan fsockopen(), fwrite() en fread() of ook gewoon file_get_contents() (maar dan met http://....)

De rechten van je map staan sowieso goed.
@t vercetti: waarschijnlijk ben ik nu te dom maar ik versta niet heel goed wat je bedoelt. Het is dus de bedoeling dat ik als admin inlog en de pagina run die dan de file inleest die in opgeef. Deze file zal zowiezo op de eigenserver staan. Dus zeker niet ergens anders op het net.

de http:// staat er eigenlijk voor omdat dit script oorspronkelijk voorzien was om andere webpagina's ook te spideren.

Wat neem ik nu best??
Ehm... wow... wat!?
Het is dus de bedoeling dat ik als admin inlog en de pagina run die dan de file inleest die in opgeef.

Kan je dat even opdelen in zinnetjes?
* Je bent admin;
* Je geeft een pagina op (relatief of absoluut, maar niet op het www);
* Die pagina wordt 'ingelezen', dus de bron ervan in een var (?)

Dat doe je met file_get_contents();

Probeer op je admin pagina maar eens:

<?php echo file_get_contents(__FILE__); ?>


[edit]Het heeft niks met dom te maken, gewoon met kennis van php functies. PHP is echt een enorm ontzettend pakket. Ze heeft overal een makkelijke functie voor. "Het kan [altijd] makkelijker".
file_get_contents() doet twee dingen. Op zelfde server leest ie source, op externe server leest ie resultaat (zou wat zijn, als iedereen je bron kon zien).[/edit]
owkay mss ben ik wat onduidelijk geweest.

Ik log in als admin

ik ga naar mijn populate.php pagina waarin ik de link naar mijn pagina meegaaf die ik wil spideren.

deze pagina bevindt zich op mijn eigen server.

Dit is de code die ik nu gebruik.
ik spreek ze momenteel dus aan met populate.php?url=www.haco.com/hsc/mainnav.htm


<?php
/*
* populate.php
*
* Script for populating the search-database with words,
* pages and word-occurences.
*/
/* Connect to the database: */
ini_set('display_errors', 1); // 0 = uit, 1 = aan 
error_reporting(E_ALL); 


include '../../includes/connect.php';
/* Define the URL that should be processed: */
$url = $_GET['url'];
echo $url;
echo "<br>";
if( !$url )
{
    die( "You need to define a URL to process." );
}
else if( substr($url,0,7) != "http://" )
{
    $url = "http://".$url;
}
/* Does this URL already have a record in the page-table? */
$result = mysql_query("SELECT page_id FROM page WHERE page_url = \"$url\"");
$row = mysql_fetch_array($result);
if( $row['page_id'] )
{
    /* If yes, use the old page_id: */
    $page_id = $row['page_id'];
	
}
else
{
    /* If not, create one: */
    mysql_query("INSERT INTO page (page_url) VALUES (\"$url\")");
    $page_id = mysql_insert_id();
	
}


/* Start parsing through the text, and build an index in the database: */

$fd = fopen($url,'r');
file_exists($fd);

while( $buf = fgets($fd,1024) )
{
    /* Remove whitespace from beginning and end of string: */
    $buf = trim($buf);
    /* Try to remove all HTML-tags: */
    $buf = strip_tags($buf);
    $buf = ereg_replace('/&\w;/', '', $buf);
    /* Extract all words matching the regexp from the current line: */
    preg_match_all("/(\b[\w+]+\b)/",$buf,$words);
    /* Loop through all words/occurrences and insert them into the database: */
    for( $i = 0; $words[$i]; $i++ )
    {
        for( $j = 0; $words[$i][$j]; $j++ )
        {
            /* Does the current word already have a record in the word-table? */
            $cur_word = strtolower($words[$i][$j]);
            $result = mysql_query("SELECT word_id FROM word WHERE word_word = '$cur_word'");
            $row = mysql_fetch_array($result);
            if( $row['word_id'] )
            {
                /* If yes, use the old word_id: */
                $word_id = $row['word_id'];
            }
            else
            {
                /* If not, create one: */
                mysql_query("INSERT INTO word (word_word) VALUES (\"$cur_word\")");
                $word_id = mysql_insert_id();
            }
             /* And finally, register the occurrence of the word: */
            mysql_query("INSERT INTO occurrence (word_id,page_id) VALUES ($word_id,$page_id)");
            print "Indexing: ".$cur_word."<br>";
        }
    }
}
fclose($fd);

?>





dus als ik het goed begrijp dien ik $fd = fopen($url,'r'); te vervangen door file_get_contents($fd);

klopt dit?
wanneer ik fopen vervang door de file_get_contents dan krijg ik volgende errors


Warning: file_get_contents() [function.file-get-contents]: php_network_getaddresses: getaddrinfo failed: No such host is known. in C:\Site\HSC\frameset\admin\populate.php on line 55

Warning: file_get_contents(http://www.haco.com/hsc/frameset/mainnav.htm) [function.file-get-contents]: failed to open stream: No error in C:\Site\HSC\frameset\admin\populate.php on line 55

Warning: fgets(): supplied argument is not a valid stream resource in C:\Site\HSC\frameset\admin\populate.php on line 59

Warning: fclose(): supplied argument is not a valid stream resource in C:\Site\HSC\frameset\admin\populate.php on line 94
chmod de bestanden en doe geen "htpp://www......"; maar
../dan de filename

of als ie niet o p root staat:

../map waar hij instaat/filename

en als hij in een map zit die in een map zit

../map1/map2/filename

enz. enz.

hoopp dat je het snapt
Misschien kan dit helpen. Ik ben nog maar een week geleden begonnen
met php-scripts. Ik kende voordien zelfs het bestaan er niet van.
Ik heb wel veel vroegere ervaringen met programmeren in c++.
Niettegenstaande heb ik drie dagen water en bloed gezweet met fopen()
om in een file te schrijven. Lezen was geen probleem
enkele tips, misschien onozel maar let er op:
Uw provider moet php ondersteunen (vraag het hem)
Uw provider zet de ini.php (dus niets van aantrekken)
De rechten op filehandeling zet u zelf (ik werk voor uploaden met WS_FTP en
daarin kan ik het doen met options). Een andere manier is met ftp-functies
maar dat heb ik niet geprobeerd.
En tot slot zet u de attributen van de betreffende files met chmod().
Succes

Reageren