Итак ... Почему потерять полученную информацию плохо? ... потому что автор производного класса, возможно, изменил представление таким образом, что отсечение дополнительной информации изменяет значение, представляемое объектом. Это может произойти, если производный класс, если используется для кэширования представления, более эффективного для определенных операций, но дорогого для преобразования обратно в базовое представление.
Также подумал, что кто-то должен также упомянуть, что вам следует делать, чтобы избежать нарезка ... Получите копию стандартов кодирования C ++, 101 правила и рекомендации.
Он предлагает несколько сложный шаблон, чтобы полностью решить проблему: иметь защищенный экземпляр копии, защищенный чистый виртуальный DoClone и публичный клон с утверждением, которое скажет вам если (далее) производный класс не смог правильно выполнить DoClone. (Метод Clone делает правильную глубокую копию полиморфного объекта.)
Вы также можете пометить конструктор копирования в явном виде базы, который позволяет явно нарезать, если это необходимо.
Правильный AddType для php - application / x-httpd-php
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Также убедитесь, что ваш php-модуль загружен
LoadModule php5_module modules/mod_php55.so
Когда вы настраиваете apache затем попытайтесь просмотреть страницу с помощью другого браузера. - у меня были дни, когда хром упорно кэширует результат и сохраняет загрузку исходного кода в то время как в другом браузере, это просто прекрасно
Если ни одно из вышеприведенных действий не работает,
попробуйте прокомментировать строку
SetHandler ....
и перезапустить apache с помощью
/etc/init.d/httpd restart
Это должно сработать!
У меня ранее была аналогичная проблема после обновления с 5.3 до 5.4. Но моя настройка выглядит немного по-другому, так как я запускаю Debian и использую fcgid для сервера PHP-страниц, а не модуль PHP5 apache / cgi. Поэтому после того, как я обновил его, он также установил php5_cgi, который столкнулся с моей установкой fcgid и больше не будет выполнять файлы PHP.
Мне пришлось отключить модуль Apache и перезапустить Apache
a2dismod php5_cgi
/etc/init.d/apache2 restart
После того, как модуль php5_cgi был в стороне, fcgid снова смог обслуживать страницы PHP.
У меня была эта проблема. Оказалось, что у меня установлены как nginx, так и apache и автоматически запускаются при загрузке. Проблема заключалась в том, что nginx связывался с первым портом http, из-за которого apache не запускался.
Также возможно, что у вас запущен nginx, но ваш php настроен для работы с apache. Чтобы проверить, запустите service nginx status
и service apache2 status
, чтобы увидеть, что работает. В случае, когда nginx запущен, а apache - нет, просто запустите sudo service nginx stop; sudo service apache2 start
, и ваш сервер теперь будет обслуживать php-файлы, как ожидалось.
У меня такая проблема. Вот как я его решаю. После установки Apache я установил PHP с помощью этой команды.
sudo apt-get install php libapache2-mod-php
он выполняется правильно, но я запрашиваю файл .php из Apache, он дает без выполнения PHP-скрипта.
Тогда я check PHP включен.
$ cd /etc/apache2
$ ls -l mods-*/*php*
, но он не показал никаких результатов. Я проверяю установленные пакеты PHP.
$ dpkg -l | grep php| awk '{print $2}' |tr "\n" " "
Различные версии PHP-версий, установленные на моем компьютере. Затем я удаляю некоторые пакеты PHP из моего предыдущего списка, используя apt-get purge.
sudo apt-get purge libapache2-mod-php7.0 php7.0 php7.0-cli php7.0-common php7.0-json
Я переустанавливаю PHP
sudo apt-get install php libapache2-mod-php php-mcrypt php-mysql
Убедитесь, что модуль PHP загружен
$ a2query -m php7.0
, если не включено:
$ sudo a2enmod php7.0
Перезапустить сервер Apache
$ sudo systemctl restart apache2
Наконец, я проверяю процесс PHP на Apache
создать пустой файл
sudo vim /var/www/html/info.php
Добавить этот контент в info.php & amp; save
<?php
phpinfo();
?>
Проверить браузер:
он показывает правильно. Я думаю, что это поможет кому угодно.
Я провел два дня, отслеживая это, и выяснил, что я помещал свои PHP-скрипты в неправильный каталог.
В моей стандартной установке Ubuntu я помещал скрипты в /var/www
. Они должны были быть в /var/www/html
.
Я только что начал работу с PHP, поэтому не знаю, связано ли мое решение с изменением версии.
Сегодня я столкнулся с этой проблемой, и ни одно из описанных решений не сработало для меня. Итак, вот еще одна возможная причина:
Если у вас есть что-то вроде
AddHandler x-mapp-php6 .php3 .php4 .php .phtml
в файле .htaccess
папки вашего веб-содержимого, это может привести к тому, что ваши скрипты PHP перестанут работать , В моем случае сервер не знал тип x-mapp-php6
, так как этот файл .htaccess
был чем-то импортированным с другого веб-хоста, когда я передал содержимое веб-сайта.
Просто удалив строку AddHandler
из файла .htaccess
решил это для меня.
AddHandler application/x-httpd-php54 .php54 .php
, которое нужно было удалить.
– Old McStopher
23 June 2014 в 04:50
У меня такая же проблема. Apache не загружает php-файлы с определенного веб-сайта, просто скачал его. Я прочитал этот пост и ответы, и я видел, что у меня есть эта строка в последнем месте файла .htaccess:
AddHandler x-mapp-php5.5 .php
Я прокомментировал это, и все работает нормально.
Спасибо всем !!!
это решило проблему для меня (у меня установлен php7):
sudo apt-get install libapache2-mod-php7.0
sudo service apache2 restart
Если кто-то использует php7 в среде Linux
Убедитесь, что вы включили php7
sudo a2enmod php7
Перезапустите службу mysql и Apache
sudo systemctl restart mysql
sudo systemctl restart apache2
Это может происходить из-за недостающих модулей, необходимых для вашего php. Предполагая, что у вас установлен php7, найдите доступные модули php7, используя
sudo apt-cache search php7-*
. Команда Above отобразит все доступные модули PHP7 для установки. Вы можете начать установку модулей, таких как
sudo apt-get install libapache2-mod-php7.0 php7.0-mysql php7.0-curl php7.0-json
У меня были похожие симптомы, но еще одно решение: в файле /etc/apache2/mods-enabled/php5.conf в комментарии был полезный совет, который я использовал:
BLOCKQUOTE># To re-enable php in user directories comment the following lines # (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it # prevents .htaccess files from disabling it.
PHP56
vim /etc/httpd/conf/httpd.conf
LoadModule php5_module libexec/apache/libphp5.so
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
Пожалуйста, взгляните на свои директивы addtype.
Мне кажется, что Apache сообщает браузеру, что он отправляет тип документа application / php для скриптов с расширениями, например .php5. На самом деле Apache должен сообщить браузеру, что сценарий выводит текст / html.
Пожалуйста, попробуйте следующее:
AddType text/html .php
Что касается вышеприведенного предложения, вы должны сообщить браузеру, что вы выводите скрипт PHP: для меня это показалось необычной идеей. Я искал ее и обнаружил, что в Интернете довольно много обсуждений. По-видимому, есть случаи, когда вы можете сказать, что вы отправляете скрипт PHP (хотя Apache должен выполнять скрипт и испускать текст / html), а также есть случаи, когда браузер просто не распознает эту конкретную Mime Тип.
Удаление кеша браузера всегда является хорошей идеей.
В случае, если это полезно, это копия моего файла /etc/httpd/conf.d/php.conf с сервера, на котором выполняется CentOS 5.9:
#
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
#
<IfModule prefork.c>
LoadModule php5_module modules/libphp5.so
</IfModule>
<IfModule worker.c>
LoadModule php5_module modules/libphp5-zts.so
</IfModule>
#
# Cause the PHP interpreter to handle files with a .php extension.
#
AddHandler php5-script .php
AddType text/html .php
#
# Add index.php to the list of files that will be served as directory
# indexes.
#
DirectoryIndex index.php
#
# Uncomment the following line to allow PHP to pretty-print .phps
# files as PHP source code:
#
#AddType application/x-httpd-php-source .phps
У меня была аналогичная проблема с OP при обновлении php5 из старой версии, до версии 5.5.9, которая является версией, установленной с Mint 17.
Я запускаю настройку LAMP на машине в моей локальной сети, которую я использую для предварительного просмотра изменений на веб-сайтах, прежде чем я загружу эти изменения на реальный сервер. Таким образом, я поддерживаю идеальное локальное зеркало фактического сайта.
После обновления файлы, которые запускаются и отображаются отлично на фактическом сайте, не будут отображаться или будут отображаться только на html на локальном компьютере. PHP не анализировался. Команда phpinfo () работала, поэтому я знал, что php работает иначе. В журнале не было ошибок. Просмотр источника страницы показал мне фактический код php.
Я построил страницу test.php, содержащую следующий код:
<?php
phpinfo();
?>
работал. Затем я обнаружил, что когда я изменил <?php
на <?
, команда больше не работала. Все мои php-сайты используют <?
вместо <?php
, которые могут быть не идеальными, но это реальность. Я исправил проблему, перейдя в / etc / php5 / apache2, выполнив поиск «short_open_tag» и изменив значение с «Выкл.» На «Вкл.».
Если ваш .htaccess имеет что-то подобное
AddType application/x-httpd-ea-php56 .php .php5 .phtm .html .htm
Если у вашего .htaccess есть что-то вроде этого ... AddHandler application / x-httpd-php53 .php .php5 .php4 .php3, то прокомментируйте его и повторите попытку обновления, это сработало для меня ...
Хорошо ... Я знаю, что на эти вопросы уже есть 1.000.000 ответов, но я потратил не менее 6 эффективных часов, выяснив это; и я искал его сотни раз и не нашел ни одной записи об этом. Поэтому я подумал, что добавлю решение своей проблемы здесь.
Если я прокомментировал эти две строки в моих .conf-файлах в файле /etc/apache2/[[SERVER-NAME].conf
:
php_admin_value engine Off
IPCComTimeout 31
, у меня нет идеи, что они делают или как они туда попали, - но он находится в каждом из моих .conf
-файлов. И если я удалю эти строки и , убедитесь, что в /etc/apache2/sites-enabled/
-палочке есть символическая ссылка , тогда она не загружает index.php - и все работает так, как должно.
У меня VirtualMin установлен на Ubuntu 16.04 VPS. Я обновился до версии PHP 7.2. Вскоре после этого я обновил версию Ubuntu и ударил ошибку «Смещение ядра: отключено». Поэтому мне пришлось удалить последнюю версию Ubuntu, и когда моя ОС снова загрузится: BOOM! Я получил ошибку, о которой говорит его пост: для каждого сайта на моем VPS он просто загружал index.php, а не показывал его.
Я пробовал всевозможные вещи:
a2enmod [MODULE_NAME]
. И я нашел имя модуля Googling. Мне пришлось активировать около 6-8 модулей, прежде чем я прошел этот этап проверки - и потребовалось несколько минут до того, как закончился кеш, - так что это был утомительный шаг.