Seite 1 von 1
include - Fehlermeldung ausblenden
Verfasst: 09.06.2010, 13:40
von Thor
Moin,
ich frage in meinem Onlineshop bei einem Lieferanten den Status der Verfügbarkeit der Waren ab. Mittels include
Code: Alles auswählen
<?php
$arti = $product_info['products_LfStatus'];
if (!empty($arti))
{
ob_start();
include 'http://xxxx.xx/index.php?cl=shproductstock&artnum='.$arti;
$artistatus=ob_get_contents();
ob_end_clean();
echo '<b>Verfügbarkeit: </b>';
echo $artistatus; // hier wird der Text ausgegeben bsp.: Ware wird für Sie bestellt.
}
?>
Jedoch ist deren Server nicht immer erreichbar oder die Abfrage läuft so langsam das SQL-Fehler oder Timeout angezeigt wird. Das sieht bei den Artikel erstens unschön aus oder führt zu langen Ladezeiten.
Ist es möglich z.B. wenn nach 3 sec. keine Verbindung zustande kommt, einfach nichts anzuzeigen? Also die Verfügbarkeitsanzeige auszuschalten?
Wäre immerhin besser, zeitweise keine Anzeige zu haben, als mir die Kunden zu vergraulen.
Ist dies möglich?
Verfasst:
von
Content Erstellung von
ABAKUS Internet Marketing
Ihre Vorteile:
- einzigartige Texte
- suchmaschinenoptimierte Inhalte
- eine sinnvolle Content-Strategie
- Beratung und Umsetzung
Jetzt anfragen:
0511 / 300325-0
Verfasst: 09.06.2010, 13:49
von Synonym
Prinzipiell ja, aber nicht mit include(), zumindest würde ich es da nicht kennen. Nutze doch einfach fsockopen oder curl, beide können Verbindungen prüfen und gegebenenfalls beenden. Dann brauchst Du auch den Umweg über dieses ob_start nicht mehr, denn beide Funktionen liefern den Content direkt zurück und kann somit an eine Variable übergeben werden.
https://php.net/manual/de/ref.curl.php
https://php.net/manual/de/function.fsockopen.php
Verfasst: 09.06.2010, 14:03
von Thor
Herzlichen Dank,
habe aber vergessen zu erwähen, in PHP bin ich ein Dau.
Kann nur Codeschnipsel einfügen per copy&paste
Werde aber versuchen mich einzulesen, verstehe aber schon beim überfliegen nur Bahnhof.
PS: PHP5
Verfasst: 09.06.2010, 14:23
von Synonym
ok, wenn Du nur Bahnhof verstehst, dann doch wohl eher fsockopen(). Ich finde curl zwar besser und schneller, aber ist auch wesentlich undurchsichtiger.
Ungetestet:
Code: Alles auswählen
<?php
$arti = $product_info['products_LfStatus'];
if (!empty($arti))
{
$host = 'xxxx.xx';
$fp = fsockopen($host, 80, $errno, $errstr, 30);
if (!$fp)
{
echo "$errstr ($errno)<br />\n";
}
else
{
$artistatus = '';
$out = "GET /index.php?cl=shproductstock&artnum=".$arti." HTTP/1.1\r\n";
$out .= "Host: ".$host."\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp))
{
$artistatus .= fgets($fp, 128);
}
fclose($fp);
echo $artistatus; // hier wird der Text ausgegeben bsp.: Ware wird für Sie bestellt.
}
}
?>
xxxx.xx ist der Host, ohne http:// 80, der Port.
$errno die Fehlernummer, wenn es eine gibt
$errstr der dazugehörige lesbare String
Die 30 am Ende ist der Timeout des Connects (nicht der Datenübertragung, dafür gibt es den stream_set_timeout() ). Wegen letzterem schau mal hier:
https://www.php.net/manual/de/function. ... imeout.php Der Aufbau ist sehr ähnlich.
Verfasst: 09.06.2010, 14:52
von Hobby_SEO79
Oben ganz am anfang vom php code:
error_reporting(E_ALL); --> Fehler anzeigen
error_reporting(0); --> Fehler nicht anzeigen
Verfasst: 09.06.2010, 15:08
von Synonym
@Hobby_SEO79
Und was machst Du, wenn der Zielserver wegen nicht Erreichbarkeit einen Error liefert, der dann wiederum per include eingebunden wird? error_reporting unterdrückt die eigenen Fehler, nicht aber die des externen Servers.
Verfasst: 09.06.2010, 19:55
von bond
Einfach ein „@“ voranstellen, dann gibt es keine Fehlermeldung bei der darauf folgenden Funktion: @include("/pfad/zur/datei");
Verfasst: 10.06.2010, 12:31
von Thor
danke Euch allen...
@Synonym
besonders dir für die Mühe, es funktioniert noch nicht ganz, werde mich aber in die Geschichte richtig einlesen. Hilft ja nix.
@bond
"@" unterdrückt wirklich die Fehlermeldung, ist erst mal als Notbehelf ausreichend. Danke