$check = file_get_contents ' ' ziel als variable oder wie

Hallo ich kann mir jemand mit php helfen.

ich habe ein php script das prüft ob ein user vorhanden ist jetzt möchte ich noch die variable an $check = file_get_contents (‚http://domain.com/’.$username.‘ anhängen um zu prüfen ob die url besteht.
das ist mein script aber leider geht nur die datenbank abfrage danach gehts nicht weiter.

<?php mysql_connect($mysql_hostname, $mysql_user, $mysql_password) or die("Opps some thing went wrong on mysql_connect");
mysql\_select\_db($mysql\_database) or die("Opps some thing went wrong on mysql\_select\_d"); if(isSet($\_POST['username'])) { $username = $\_POST['username']; $username = mysql\_real\_escape\_string($username); $sql\_check = mysql\_query("SELECT name FROM ic1\_user WHERE name='$username'")or die("error query"); if(mysql\_num\_rows($sql\_check)) { echo ''.$username.' is already in use.';
}
else
{
$check = file_get_contents('http://domain.com/user/'.$username.'')

if(strpos($check,"Sorry")!==false)
{

echo 'OK';
}
else
{
echo 'User nicht gefunden';
}
}
?>

Hall

versuche es doch mit

$check = file_get_contents('http://domain.com/user/?username=’.$username.’’) und am ende einen ;

Sonst wird ja username nicht per POST übergeben, den du abfragst.

Grüße
Tom

Die Funktion heißt isset
http://php.net/manual/de/function.isset.php

Falls das nicht hilft, wäre die Fehlermeldung hilfreich.

hallo,

die syntax ist so nicht richtig.
es müßte so geschrieben werden

$check = file_get_contents('http://domain.com/user/’.$username);

cu
harald

Leider funktioniert das nicht

Hallo,

das sind zu wenig Informationen um wirklich helfen zu können.

Hast du das fehlende Semikolon hinter $check = file_get_contents('http://domain.com/user/’.$username.’’)
bemerkt?

Wie genau entsteht diese URL? Sind da Dateien hinterlegt? Arbeit da eine rewriting-rule?

Was genau heißt „geht nicht weiter“?
Kommt gar nichts? Dann schau ins Fehlerprotokoll, bestimmt ist da was eingetragen.

Kommt etwas, was du nicht erwartet hast? Wenn ja: Was hast du erwartet und was kam?

Was passiert wenn du die URL direkt aufrufst?

Einen schönen Sonntag wünsche ich! :wink:

Hallo,
die daten kommen aus ein eingabe formular, nach der eingabe prüft ein script ob es den user schon inder datenbank giebt, danach soll geprüft werden ob es den user unter http://domain.com/user/xxxxx/ vorhanden ist.

hierzu benutze ich die Methode ($check = file_get_contents) leider kann ich die user variable '.$username. nicht am ende hinzufügen. wie im phpbeispiel gezeigt wird
file_get_contents(‚http://www.example.com/‘, $context);

eine rewrite ist nicht gesetzt

wenn ich den username selbst einsetzte funktioniert mein script

ein fehlerprotokoll hab ich leider nicht, ich hab mit php nicht soviel erfahrung

Okay.

Diese URL http://domain.com/user/xxxxx/ - woher kommt xxxxx? Ist das eine Datei, die du angelegt hast?

file_get_contents braucht allow_url_fopen wenn du URLs verwenden willst. Ist das aktiv?

PHP-Fehler sollten irgendwo protokolliert werden, oft im Logfile des Servers.
Es ist wichtig, dass du das findest und anschaust, da hier eine Menge Hinweise enthalten sein können.

Bitte erläutere mal, was du an Verhalten des Skriptes erwartest und was wirklich passiert…

url_fopen ist in php aktive

Die xxx stehen für den username die der user im eingabefeld eingiebt.

Schreibe ich den username dierekt rein funktuniert das script.

Funktion: überprüft ob der username schon regestriert ist und ob er auf der domain existiert : http://beispieldomain.com/user/xxxxx/
was für mein projekt sehr wichtig ist.

Das Problem ist das ich den user name nicht so übergeben kann an:
$check = file_get_contents('http://beispieldomain.com/user/’.$username.’’/);

laut php doku soll man …/user/, $username, /’); setzen.

Hallo nochmal.

http://domain.com/user/xxx
besteht aus mehreren Teilen, die der Server nach und nach auswertet.
http und Domain sowie TLD funktionieren wohl.
Aber dann wirds interessant.
/user/ ist zunächst mal nur ein Verzeichnis auf dem Webserver mit dem Namen „user“.
xxx ist eine dortige Datei. Mehr erstmal nicht.

Erst durch rewriting und / oder Skripte kann da etwas anderes liegen als eine Datei.

Was passiert, wenn du http://domain.com/user/xxx direkt im Browser aufrufst?
Mit
a) einem existierenden User und
b) einem nicht existierenden User

Die Übergabe an file_get_contents kannst du überprüfen indem du
error_log('http://beispieldomain.com/user/’.$username.’’); verwendest und ins Protokoll schaust oder das Ganze einfach mit
echo('http://beispieldomain.com/user/’.$username.’’);
in die Webseite schreibst.

Wo in der Doku steht das, was du schreibst? Ich erinnere mich gerade nicht, das gesehen zu haben.

Ich verstehe noch immer nicht genau, was genau nicht funktioniert.

Kannst du bitte mal schildern, was du erwartest, wenn du einen vorhandenen Benutzer übergeben hast und was dann genau passiert?
Und dann nochmal für einen nicht vorhandenen Benutzer?

Wozu überhaupt diese Prüfung mit der URL? Reicht die Datenbank nicht?

Viele Grüße!

So jetzt hat es funktioniert mit ‚.$username.‘/’);

Danke an alle die geholfen haben

Hallo sero777,

Um mit file_put_contents über http auf Dateien zugreifen willst musst du das auf dem Server erlaubt haben.

Schau dir mal die „Tip box“ in der php Doku an: http://de2.php.net/file_get_contents

Da ich aber vermute, dass du ein lokales Verzeichnis prüfen willst solltest du auf file_exists umsteigen.
http://de2.php.net/manual/de/function.file-exists.php

Das sollte für dein Fall besser sein.

Viele Grüße
Frank

vielen dank,
die funktion die ich wollte funktioniert jetzt ertsmal.

Im Moment teste ich noch die
$check = file_get_contents('http://domain.com/user/’.$username.’/’);

if(strpos($check,„Sorry“)!==true)

… da ich hier noch fehler habe, manchmal sagst sie der user sei da obwohl bei diesen user ein Sorry file not found steht …

Hallo,

Strpos gibt dir immer die erste Position des gesuchten String zurück und nie true, daher macht es nicht so viel Sinn auf True zu prüfen.

Darüber hinaus gibt der Server ein 404 Fehler zurück, wenn man er eine Datei nicht gefunden hat, ob da im Text jetzt Sorry steht kann ich nicht sagen, müsste ich testen.

Sichere wäre eine Funktion wie:

function url_exists($url) {
// Version 4.x supported
$handle = curl_init($url);
if (false === $handle)
{
return false;
}
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_FAILONERROR, true); // this works
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
$connectable = curl_exec($handle);
curl_close($handle);
return $connectable;
}

Die gibt prüft ob eine URL existiert. Auch gefunden in der php Doku zu file_exists, meiner Meinung nach immer noch der bessere weg über das lokale filesystem zu prüfen ob das Verzeichnis existiert.

Viele Grüße frank

Hallo,

zu erst einmal, die Art der Datenbankabfrage
ist nicht mehr aktuell und könnte in den nächsten PHP-Versionen wegfallen.
Zumal diese recht unsicher ist.

Schau mal hier: http://php.net/manual/de/book.pdo.php

Nun zum eigentlichem Problem.
Eine Link-Überprüfung an Hand von filegetcontents oä. funktioniert nicht,
da nicht auf das eigene Medium zugegriffen wird.

Auf die Schnelle hab ich das gefunden.
http://www.php.de/php-tipps-2004/3365-link-pruefen.html

Gruß Mirko

hi,

gehe mal das script schritt für schritt durch.
dazu kann man var_dump(); verwenden.

als parameter gibst du immer die variable oder funktion die du prüfen möchtest ein, dann erhälst du eine ausgabe mit dem zustand/eigenschaften der variable an diesem punkt. mit einem nachgefügten die; kannst du die weitere ausführung des scriptes „anhalten“

z. b.
//variable
var_dump($username); die;
//funktion
var_dump(file_get_contents('http://domain.com/user/’.$username));die);die);

so kann man eingrenzen, an welchem punkt der fehler auftritt und ihn lokalisieren.

cu
harald

Was ist also die Frage?

Hallo Sero777,

ich erkenne hier keinen offensichtlichen Bug.

Versuche mal (probehalber) an den Anfang der PHP-Datei (im ersten HP-Block) folgende Befehle einzutragen:
error_reporting(E_ALL);
ini_set(„display_errors“, 1);

Das sollte nur zu Testzwecken und nicht dauerhaft angeschaltet sein!

Nun die Seite nochmal aufrufen, dann solte er „Warnings“ und „Errors“ anzeigen. Wichtig: „Notice: Undefined index:“ kannst Du ignorieren. Das bedeutet nur, dass die genannte Variable nicht sauber vordefiniert wurde, sondern „einfach so benutzt“.

Nachdem Du die Fehler gesehen hast, die Befehle wieder rauslöschen oder mit „//“ auskommentieren.

Viele Grüße,
Markus