"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

function_exists & include

TOM 14.10.2007 - 13:38 1199 10
Posts

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7368
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

OC Addicted
Registered: Jul 2002
Location: AT
Posts: 7813
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
Bearbeitet von Bodominjaervi am 14.10.2007, 13:56

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
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 Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7368
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

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
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 Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7368
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

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25422
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 Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7368
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
Avatar
Registered: Feb 2003
Location: Linz
Posts: 400
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
Avatar
Registered: Oct 2002
Location: Pre
Posts: 14592
edit: zu bald in der früh.... meine lösung hätt das timeout problem ned behoben

TOM

Super Moderator
Oldschool OC.at'ler
Avatar
Registered: Nov 2000
Location: Vienna
Posts: 7368
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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz