2010-06-23 2 views
6

Welches ist die Frage, die mein Partner sagte, ich würde nicht antworten müssen, also um meinen Punkt zu beweisen, entfernte ich PHP und simulierte ein Serverproblem. Und hey presto, der Webserver bietet die PHP-Quelle als Download an.Gibt es eine Möglichkeit, PHP-Dateien zu stoppen, wenn der PHP-Prozessor offline ist?

Also, die Frage, gibt es eine Möglichkeit zu stoppen Quelle im Falle eines Server-Glitch, Bug oder vorübergehenden Verlust der Verbindung zu den entsprechenden Modulen usw. serviert wird?

+2

Abgesehen von Ihrer Bootstrap-Datei sollten sich Ihre anderen PHP-Dateien aus diesem Grund außerhalb des Dokumentenstamms befinden. –

+0

+1 Ben Rowe es ist in der Tat etwas, was ich zu schätzen anfache, zu sehen, wie viel von meinem Code auf dem Display ist, wenn dies geschieht, ist ziemlich beängstigend. –

Antwort

3

Der einzige Weg, Quelle offenbart ist, wenn Sie die Serverkonfiguration durch Fehler ändern - für Beispiel: Sie verwenden eine mod_php für Apache und entfernen das Modul versehentlich.

Für diesen speziellen Fall können Sie dies tun:

<IfModule php5_module> 
    AddHandler php5-script .php 
    PHPIniDir "/etc" 
</IfModule> 
<IfModule !php5_module> 
    <FilesMatch "\.php$"> 
     Order allow,deny 
     Deny from all 
     Satisfy All 
    </FilesMatch> 
</IfModule> 
+0

Facebook hat einen Teil des Quellcodes seiner Hauptseite verloren. Offensichtlich war der Grund, dass es einen Fehler in 'mod_php' unter hoher Last gab. http://techcrunch.com/2007/08/11/facebook-source-code-leaked/ – icktoofay

+0

@ick Nun ... das ist ein Fehler. Man kann nicht viel tun, außer es zu reparieren oder einen Filter (z. B. ein anderes Modul oder einen Proxy) vor Apache zu setzen, der die Anfrage abbricht, wenn sie den Quellcode sieht (was schwer zu tun wäre). – Artefacto

+0

@Artefacto: Ja, es war ein Fehler, aber es könnte möglicherweise wieder passieren. – icktoofay

2

Setzen Sie die PHP-Dateien außerhalb des Dokumentstammverzeichnisses und fordern Sie sie dann von PHP-Dateien im Stammverzeichnis des Dokuments ab. Sie werden noch ein wenig Code wie diesen oder etwas bekommen, aber das wird sie sehr viele Details nicht geben:

require(dirname(dirname(__FILE__))."/real_file.php"); 
+0

Das ist ein interessanter Trick. – staticsan

0

ich ein paar einfache Funktionen schrieb eine URL MVC-Stil zu analysieren, (basierend auf kissmvc.com), und dies ist die einzige PHP-in mein Dokument root:

<?php 

require '../bootstrap.php'; 
parse_request(); 

Also, wenn etwas passiert ist, das ist alles, was jeder sehen würde. Alles andere wird ab Bootstrap behandelt. Wenn ich wollte, könnte ich parse_request() auch in bootstrap.php verschieben, aber ich habe es so gemacht, dass ich meinen Bootstrap einbinden konnte und nicht alle Website-Sachen verschickte, wenn ich nur ein Cron-Skript schlug (und das war es) bevor ich über die Funktion php_sapi_name() und die Konstante realisierte.

Das tut nicht gut, wenn Sie eine bestehende Seite mit PHP in der Docroot haben, oder Wordpress, etc. verwenden, aber wenn Sie die Option haben, wird dieses spezifische Problem davon abhalten, Sie in den Jungen zu treten.

+0

Ich werde das untersuchen müssen, könnte etwas Neuschreiben von Code nehmen, den ich nicht ganz selbst entworfen habe, aber für die langfristige Bewegung aller Mein Code ist das Ziel. –

Verwandte Themen