Du befindest Dich im Archiv vom ABAKUS Online Marketing Forum. Hier kannst Du Dich für das Forum mit den aktuellen Beiträgen registrieren.

include - Fehlermeldung ausblenden

Ajax, Hijax, Microformats, RDF, Markup, HTML, PHP, CSS, MySQL, htaccess, robots.txt, CGI, Java, Javascript usw.
Neues Thema Antworten
Thor
PostRank 7
PostRank 7
Beiträge: 643
Registriert: 21.05.2003, 20:14
Wohnort: Sankt Ingbert

Beitrag von Thor » 09.06.2010, 13:40

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&#91;'products_LfStatus'&#93;;
if &#40;!empty&#40;$arti&#41;&#41;
&#123;

ob_start&#40;&#41;;
include 'http&#58;//xxxx.xx/index.php?cl=shproductstock&artnum='.$arti;
$artistatus=ob_get_contents&#40;&#41;;
ob_end_clean&#40;&#41;;
echo '<b>Verfügbarkeit&#58; </b>';
echo $artistatus; // hier wird der Text ausgegeben bsp.&#58; Ware wird für Sie bestellt.
&#125;
?>
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?

Anzeige von ABAKUS

von Anzeige von ABAKUS »

Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 09.06.2010, 13:49

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

Thor
PostRank 7
PostRank 7
Beiträge: 643
Registriert: 21.05.2003, 20:14
Wohnort: Sankt Ingbert

Beitrag von Thor » 09.06.2010, 14:03

Herzlichen Dank,

habe aber vergessen zu erwähen, in PHP bin ich ein Dau. :oops:
Kann nur Codeschnipsel einfügen per copy&paste
Werde aber versuchen mich einzulesen, verstehe aber schon beim überfliegen nur Bahnhof. :cry:

PS: PHP5

Anzeige von ABAKUS

von Anzeige von ABAKUS »

SEO Consulting bei ABAKUS Internet Marketing
Erfahrung seit 2002
  • persönliche Betreuung
  • individuelle Beratung
  • kompetente Umsetzung

Jetzt anfragen: 0511 / 300325-0.


Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 09.06.2010, 14:23

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&#91;'products_LfStatus'&#93;;
if &#40;!empty&#40;$arti&#41;&#41;
&#123;
	$host = 'xxxx.xx';
	$fp = fsockopen&#40;$host, 80, $errno, $errstr, 30&#41;;
	if &#40;!$fp&#41;
	&#123;
		echo "$errstr &#40;$errno&#41;<br />\n";
	&#125;
	else
	&#123;
		$artistatus = '';
		$out = "GET /index.php?cl=shproductstock&artnum=".$arti." HTTP/1.1\r\n";
		$out .= "Host&#58; ".$host."\r\n";
		$out .= "Connection&#58; Close\r\n\r\n";
		fwrite&#40;$fp, $out&#41;;
		while &#40;!feof&#40;$fp&#41;&#41;
		&#123;
			$artistatus .= fgets&#40;$fp, 128&#41;;
		&#125;
		fclose&#40;$fp&#41;;
		echo $artistatus; // hier wird der Text ausgegeben bsp.&#58; Ware wird für Sie bestellt.
	&#125;
&#125;
?>
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.

Hobby_SEO79
PostRank 9
PostRank 9
Beiträge: 1883
Registriert: 19.06.2008, 23:09

Beitrag von Hobby_SEO79 » 09.06.2010, 14:52

Oben ganz am anfang vom php code:

error_reporting(E_ALL); --> Fehler anzeigen
error_reporting(0); --> Fehler nicht anzeigen

Synonym
PostRank 10
PostRank 10
Beiträge: 3708
Registriert: 09.08.2008, 02:55

Beitrag von Synonym » 09.06.2010, 15:08

@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.

bond
PostRank 4
PostRank 4
Beiträge: 186
Registriert: 20.06.2008, 00:41

Beitrag von bond » 09.06.2010, 19:55

Einfach ein „@“ voranstellen, dann gibt es keine Fehlermeldung bei der darauf folgenden Funktion: @include("/pfad/zur/datei");
Zuletzt geändert von bond am 10.06.2010, 12:32, insgesamt 1-mal geändert.

Thor
PostRank 7
PostRank 7
Beiträge: 643
Registriert: 21.05.2003, 20:14
Wohnort: Sankt Ingbert

Beitrag von Thor » 10.06.2010, 12:31

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

Antworten
  • Vergleichbare Themen
    Antworten
    Zugriffe
    Letzter Beitrag