function_exists & include

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/function_exists_amp_include_186443/page_1 - zur Vollversion wechseln!


TOM schrieb am 14.10.2007 um 13:38

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):

Code: PHP
<?php
if (function_exists('random')) {
random();
} ?>

Wie verknüpfe ich diese function_exists Abfrage nun mit einem normalen
Code: PHP
<? 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 schrieb am 14.10.2007 um 13:49

EDIT2:

Vielleicht klappts ja doch:

Code: PHP
<?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 :confused:

Vielleicht sind hier Dinge dabei, die dir helfen:
http://at2.php.net/function.file-exists


mat schrieb am 14.10.2007 um 14:25

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 schrieb am 14.10.2007 um 14:32

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 schrieb am 14.10.2007 um 14:40

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 schrieb am 14.10.2007 um 14:44

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 schrieb am 14.10.2007 um 14:49

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 schrieb am 14.10.2007 um 15:24

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 schrieb am 15.10.2007 um 08:31

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 schrieb am 15.10.2007 um 08:41

edit: zu bald in der früh.... meine lösung hätt das timeout problem ned behoben


TOM schrieb am 20.10.2007 um 01:18

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




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2026