2009-10-16 2 views
2

Я создал свой первый архив ФАР со следующим кодом:архив Phar выходы jibberish

$phar = new Phar('myphar.phar'); 
$phar->addFile("index.php"); 
$phar->setStub($phar->createDefaultStub('index.php', 'index.php')); 

Упомянутая index.php только делает один вывод:

echo "I am in a PHP archive!"; 

Когда я бегу выше код, myphar.phar, и когда я запускаю в cli, вывод «Я в архиве PHP!». Однако, когда я вызываю myphar.phar из веб-браузера, он печатает некоторые странные символы, например ????�???�?, вместо моего содержимого index.php и без ошибок.

я добавил следующую строку в мой апаче httpd.conf, чтобы поддержать ФАРЫ архивов:

AddType application/x-httpd-php .phar 

Кто-нибудь знает, почему это работает на кли, но не в браузере?

+0

Странно. Я не могу воспроизвести его, хотя я использовал ваш код и, вероятно, имел ту же конфигурацию (я использую PHP 5.3 и Phar 2.0.0-dev). Какую версию PHP и Phar вы используете? Они актуальны? –

+0

Моя версия PHP действительно 5.3.0, и у меня такая же версия Phar. phpinfo() сообщает, что phar также является зарегистрированным потоком PHP. Я должен упомянуть, что я использую XAMPP в Mac OS X 10.6 – Pascal

+0

Просто хотел добавить, что эта ошибка определенно находится в конфигурации Apache. – Evert

ответ

0

Вы пытались просмотреть источник веб-страницы? Возможно, вы как-то забыли перезапустить Apache после изменения httpd.conf.

+0

Описанные мной персонажи - единственное, что вернулось в источнике. Я перезапустил apache несколько раз. – Pascal

+0

Можете ли вы предложить ссылку для загрузки файла '.phar'? Я хочу попробовать его на своей машине. –

+0

Вот он: http://bit.ly/12Xr9C Это застежка-молния, но не с сжатием phar. – Pascal

-1

Мое понимание phar-файла, вы должны открыть (fopen) файл в вашем php-скрипте, который вы собираетесь вызывать ... Если вы возвращаете эти символы, это означает, что apache отправляет вам файл в двоичном формате ....

Если вы добавите это приложение «AddType application/x-gzip .gz .tgz .phar» в конфигурацию apache, это сделает файл загружаемым как любой другой архивный файл и будет не выполнить его как PHP скрипт

+0

Я не хочу загружать файл в виде двоичного файла, но хочу отображать его содержимое. – Pascal

6

ответ на этот вопрос заключается в

detect_unicode 

настройка в вашем php.ini.

В настоящее время существует ошибка в PHP (http://bugs.php.net/bug.php?id=42396), которая делает работу __halt_compiler() неработоспособной, если включен параметр detect_unicode.

Так как временное решение, установить

detect_unicode = Off 

в вашем php.ini. Цена, которую вы должны заплатить, - это невозможность использования символов Юникода в качестве имени переменных, функций и классов (они все еще остаются в пределах внутренних комментариев и строк)

+0

Это также происходит, если вы требуете ('myphar.phar') 'в скрипте, запущенном с веб-сервера XAMPP или исполняемого файла PHP.Если вы не хотите переворачивать флаг detect_unicode, другим обходным путем является использование 'require ('phar: //myphar.phar')'. –

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

  • Нет связанных вопросов^_^