2009-04-04 4 views
3

Я взял на себя проект PHP, и я пытаюсь запустить его в своем dev-блоке. Я разработчик, а не системный администратор, поэтому мне трудно работать.Включая различные типы файлов в PHP

Предыдущий разработчик использовал .h файлы для включения PHP. Моя текущая конфигурация принимает этот файл .h и включает его без его выполнения. Что мне нужно искать в моей конфигурации apache (или это мой php.ini)?

EDIT:

что-то щелкнуло, когда я прочитал один из приведенных ниже комментариев. Код использует теги стиля ASP «<?». Я включил эту опцию в php.ini и, согласно phpinfo(), она включена, но apache все еще просто включает код в виде текста.

Я только что проверил его и запустил код с полным открытием PHP-тега «<?php» устраняет проблему. Сказав это, мне все равно нравится работать по-другому.

Я запускаю код на Macbook с последними имеющимися версиями. PHP 5.2.6, postgresql 8.3 и apache 2.

Код работает на промежуточном сервере, но я не могу понять, в чем разница.

EDIT

Durrr ... У меня не было short_open_tags включены в php.ini.

+0

Я бы изменил их, так как с небольшим угадыванием кто-то может легко прочитать файлы, если вы установите его на другой сервер, и забудьте сделать файлы .h не загружаемыми, чтобы в принципе забыть сказать, что apache не обрабатывает его как текст file – Thomaschaaf

+0

Когда вы говорите «включая его», вы имеете в виду, что пользователь идет (скажем) site.com/somepage.php, а затем somepage.php выдает команду include («whatever.h»)? Вы имеете в виду, что пользователь действительно отправляется на сайт site.com/whatver.h? – Kip

+0

Кип - позже. Он включен в include_once («whatever.h») – jeffkolez

ответ

6

Может ли проблема заключаться в том, что файл .h, который вы включаете, только начинается с php-кода без открытия тега «<?php»?

include Из документации:

Когда файл включается, разбор капель из режима PHP и в режим HTML в начале целевого файла, и снова возобновляется в конце.По этой причине любой код внутри целевого файла, который должен быть выполнен как код PHP, должен быть заключен в пределах valid PHP start and end tags.

2

PHP - это интерпретируемый язык, поэтому вы не можете «включать» файл без его выполнения. Помните, что «.h» - это просто расширение файла, поэтому, хотя предыдущий кодер может помещать PHP в файл «.h», он по-прежнему остается только PHP.

Подробнее о проблемах, с которыми вы столкнулись, было бы полезно.

+0

Дон прав. include, include_once, require и require_once всю функцию, выполнив целевой файл. PHP не имеет понятия «в том числе без выполнения». – Kalium

1

вы можете использовать файл .htaccess и добавьте:

строку php_value auto_prepend_file /path/to/include-file.h


Редактировать

Я только что прочитал, что .htaccess работает только с версией модуля php.

1

Вы должны изменить их все на расширения .php. Но, если вы собираетесь оставить их как .h, вы измените отображение в Apache. Это Apache, который запускает файл через соответствующий интерпретатор, а не PHP. Механизм PHP обработает все переданное ему.

+0

Если то, что он говорит, является точным, он загружает php-файл, и он включает команду include ("whatever.h"), поэтому не имеет значения, что такое параметр apache. – Kip

+0

Перечитайте вопрос, это непонятно, но я думаю, что, возможно, вы правы, а пользователь на самом деле собирается на сайт.com/whatever.h – Kip

+0

Нет, я собираюсь на сайт site.com/index.html. Конфигурация apache выполняет файл .html как PHP и запускает include_once («whatever.h»). Я не хочу менять все файлы .h, их много. Перепись сайта находится в работе. – jeffkolez

0

include и require выполнит включенный файл. Если вы используете readfile, он просто перекликается с файлом, не рассматривая его как PHP-код.

-1

Если .h файлы «отсутствует» в <?php директиву, то вы, возможно, придется перейти от включать что-то вроде:

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

Лично я стараюсь избегать Eval всякий раз, когда я могу, но иногда выбора просто нет.

Смежные вопросы