function_exists & include
TOM 14.10.2007 - 13:38 1201 10
TOM
Super ModeratorOldschool OC.at'ler
|
Folgende Problemstellung: Ich Include von einer PHP-Site ein PHP-Script auf einem anderen Server/Webspace... funkt ansich problemlos, ausser der Server ist down bzw. das Script wird unabsichtlich gelöscht/verschoben/umbenannt (nona). Kann ich irgendwie function_exists für "fremde" (also nicht auf dem Webspace befindliche) Scripte einbinden? Ansonsten habe ich es auf die Art gelöst (damit der Seitenaufbau nicht gestoppt wird, wenn es nicht available war): <?php
if (function_exists('random')) {
random();
} ?>
Wie verknüpfe ich diese function_exists Abfrage nun mit einem normalen <? include ("http://www.nichtdieselbedomain.at/random.php"); ?>
? geht das überhaupt bzw. gibt es eine alternative die das selbe kann? => einfach das include skippen wenn nicht verfügbar, um den seitenaufbau zu sichern tia TOM
|
Bodominjaervi
OC Addicted
|
EDIT2: Vielleicht klappts ja doch: <?php
class Url
{
/**
* Check if an url is existed
*
* @param string $url
* @access static
* @return bool True if the url is accessible and false if the url is unaccessible or does not exist
* @throws Exception An exception will be thrown when Curl session fails to start
*/
public static function exists($url)
{
if (null === $url || '' === trim($url))
{
throw new Exception('The url to check must be a not empty string');
}
$handle = curl_init($url);
if (false === $handle)
{
throw new Exception('Fail to start Curl session');
}
curl_setopt($handle, CURLOPT_HEADER, false);
curl_setopt($handle, CURLOPT_NOBODY, true);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, false);
// grab Url
$connectable = curl_exec($handle);
// close Curl resource, and free up system resources
curl_close($handle);
return $connectable;
}
}
?>
How to use:
<?php
try
{
if (Url::exists('http://phpvietnam.net'))
{
// Do something here
}
}
catch (Exception $ex)
{
// Do something here
}
?>
Kannst du hier statt der URL nicht einfach das fremde Script eingeben? Müsst doch auf die gleiche Weise funktionieren Vielleicht sind hier Dinge dabei, die dir helfen: http://at2.php.net/function.file-exists
Bearbeitet von Bodominjaervi am 14.10.2007, 13:56
|
mat
AdministratorLegends never die
|
ein fremdes php-script zu inkludieren ist eine sehr schlechte idee, sowohl security-mäßig als auch für die ausführung deines scripts (das den fremden code versucht synchron zu laden). am besten du erzählst mal warum du das brauchst, dafür gibt es sicher eine bessere methode über ein intermediate file.
|
TOM
Super ModeratorOldschool OC.at'ler
|
naja "fremd"... ist schon mein script, auf meinem webspace/server... nur eben auf einem anderen :]
Situation:
Auf einem server rennt das forum und auf einem anderen die website. Auf dem Forum-Server wird ein "recent posts" Script ausgegeben, welches ich auf der Website (anderer Server) Include.
|
mat
AdministratorLegends never die
|
ok, das musst du ganz anders angehen. das forum erstellt bei einem neuen beitrag ein xml, sowas wie das hier und speichert es als file ab. die beste methode wäre jetzt ein unabhängiger cronjob, der das file auf den server der webseite kopiert. die webseite greift dann nur noch auf das lokale file zu. ist der forumserver down, dann ändern sich die recent posts einfach nicht.
|
TOM
Super ModeratorOldschool OC.at'ler
|
wäre eine alternative... dafür müsste ich aber den hoster anmailen, da ich mir selbst keine cronjobs einrichten kann (das dauert dann wieder und wenn ich schnell was ändern will, müsste ich warten)
warum nicht dieses url exists? werde mich jetzt wahrscheinlich ein bisschen damit rumspielen :]
|
mat
AdministratorLegends never die
|
weil es sicher lässig ist, wenn man auf deine startseite geht und dort warten muss bis der andere server, der gerade down ist, ein time-out gibt.
|
TOM
Super ModeratorOldschool OC.at'ler
|
klingt einleuchtend... kannst du mir ein cronjob bsp. geben um ein file von server A zu server B zu kopieren
hab noch nicht wirklich viel mit cronjobs gearbeitet und weiss auch ned wirklich, wie ich das aufbauen soll (damit die recent posts immer aktuell sind, also in welchem intervall er das file kopieren soll)
was für schreibrechte muss ich dann für die cronjob-lösung setzen (für file bzw. ordner wo das file hinkommt)?
|
gue
Addicted
|
Ich würde das genau umgekehrt machen, als mit einem cronjob, sprich: Der Forumserver postet seine letzten Beiträge an den Webserver (an ein PHP Skript), das kannst du z.B. mit CURL machen und vma auch in der von mat vorgeschlagenen XML Form. Dann brauchst du keinen cronjob und es ist auch immer synchron.
|
semteX
begehrt die rostschaufel
|
edit: zu bald in der früh.... meine lösung hätt das timeout problem ned behoben
|
TOM
Super ModeratorOldschool OC.at'ler
|
file 1:1 rüber kopieren funkt auch nicht, da im file eine datenbankabfrage stattfindet... und er die daten auf dem "falschen"/neuen server natürlich nicht findet... müsste man also das script komplett umschreiben => suckt
habe jetzt auch "function pingSite($webserver)" probiert... funktioniert manchmal recht gut, manchmal läd es sich (trotz niedrig eingestelltem timeout) dumm und dämlich...
nervt
|