2009-04-04 9 views
3

Ich habe ein PHP-Projekt übernommen und versuche es auf meiner Dev-Box laufen zu lassen. Ich bin ein Entwickler und kein Systemadministrator, daher habe ich Probleme damit, es zum Laufen zu bringen.Einschließlich verschiedener Dateitypen in PHP

Der vorherige Entwickler verwendete .h-Dateien, um PHP einzuschließen. Meine aktuelle Konfiguration nimmt diese .h-Datei und fügt sie ein, ohne sie auszuführen. Was muss ich in meiner Apache-Konfiguration suchen (oder ist es meine php.ini)?

EDIT:

Etwas angeklickt, wenn ich einen von den Kommentaren unten zu lesen. Der Code verwendet ASP-Stil-Tags "<?". Ich habe die Option in php.ini eingeschaltet und gemäß phpinfo(), es ist aktiviert, aber Apache ist immer noch nur den Code als Text enthalten.

Ich habe es gerade überprüft und läuft den Code mit der vollständigen Eröffnung PHP-Tag "<?php" behebt das Problem. Nachdem ich das gesagt habe, würde es mir trotzdem gefallen, dass es in die andere Richtung geht.

Ich führe den Code auf einem Macbook mit den neuesten verfügbaren Versionen. PHP 5.2.6, PostgreSQL 8.3 und Apache 2.

Der Code funktioniert auf dem Staging-Server, aber ich kann nicht herausfinden, was der Unterschied ist.

EDIT

Durrr ... Ich habe nicht short_open_tags in php.ini aktiviert.

+0

Ich würde sie ändern, denn mit ein wenig Raten könnte man leicht die Dateien lesen, wenn Sie es auf einem anderen Server installieren und vergessen, .h-Dateien nicht herunterladbar zu machen, um Apache zu vergessen, es nicht wie ein Text zu behandeln Datei – Thomaschaaf

+0

Wenn Sie "including it" sagen, meinen Sie, der Benutzer geht zu (say) site.com/somepage.php und dann gibt somepage.php einen Befehl include ("whatever.h") aus? Meinst du, der Benutzer geht tatsächlich zu site.com/whatver.h? – Kip

+0

Kip - der spätere. Es ist mit einem include_once ("whatever.h") enthalten. – jeffkolez

Antwort

6

Könnte das Problem sein, dass die .h-Datei, die Sie einschließen, nur in PHP-Code ohne das öffnende "<?php" -Tag beginnt?

Von include Dokumentation:

Wenn eine Datei enthalten ist, fällt aus PHP-Modus und in HTML-Modus zu Beginn der Zieldatei Parsing und nimmt wieder am Ende.Aus diesem Grund muss jeder Code in der Zieldatei, der als PHP-Code ausgeführt werden soll, in valid PHP start and end tags eingeschlossen sein.

2

PHP ist eine interpretierte Sprache, daher können Sie eine Datei nicht "einschließen", ohne sie auszuführen. Denken Sie daran, dass '.h' nur eine Dateierweiterung ist. Obwohl der vorherige Programmierer PHP in eine '.h' Datei geschrieben hat, ist es immer noch nur PHP.

Weitere Details zu den Problemen, denen Sie begegnen, wären hilfreich.

+0

Don ist richtig. include, include_once, require und require_once funktionieren alle durch Ausführen der Zieldatei. PHP hat keine Vorstellung von "einschließlich ohne Ausführung". – Kalium

1

können Sie eine .htaccess-Datei verwenden und fügen:

php_value auto_prepend_file /path/to/include-file.h


bearbeiten

Ich habe gerade gelesen, dass .htaccess funktioniert nur mit der Modulversion von PHP.

1

Sie sollten sie alle in .php Erweiterungen ändern. Wenn Sie sie jedoch als .h belassen, ändern Sie das Mapping in Apache. Es ist Apache, der die Datei über den richtigen Interpreter und nicht über PHP ausführt. Die PHP-Engine verarbeitet alles, was an sie übergeben wird.

+0

Wenn das, was er sagt, genau ist, lädt er eine PHP-Datei, und es wird ein include ("whatever.h") -Befehl, so dass es egal ist, was die Apache-Einstellung ist. – Kip

+0

Lesen Sie die Frage erneut, es ist nicht klar, aber ich denke, Sie haben Recht und der Benutzer wird tatsächlich zu site.com/whatever.h gehen – Kip

+0

Nein, ich gehe zu site.com/index.html. Die Apache-Konfiguration führt die .html-Datei als PHP aus und führt include_once ("whatever.h") aus. Ich möchte noch nicht alle .h-Dateien ändern - es gibt viele davon. Eine Neufassung der Website ist in Arbeit. – jeffkolez

0

include und require wird die enthaltene Datei ausführen. Wenn Sie readfile verwenden, wird die Datei einfach wiederholt, ohne sie als PHP-Code zu behandeln.

-1

Wenn die H-Dateien „fehlende“ die <?php Richtlinie sind, dann können Sie von wechseln haben, gehören zu so etwas wie:

eval(file_get_contents("file.h")); 

Persönlich versuche ich eval zu vermeiden, wann immer ich kann, aber manchmal Es gibt einfach keine Wahl.

Verwandte Themen