Данные не вставляются из html в базу данных в php [duplicate]

Действительно, окончательная версия C ++ 11 не позволяет использовать списки инициализаций с правой стороны (или, если угодно, с левой стороны) двоичного оператора.

Во-первых, , списки инициализаторов не являются выражениями, как определено в § 5 Стандарта. Аргументы функций, а также бинарных операторов обычно должны быть выражениями, а грамматика для выражений, определенных в § 5, не включает синтаксис для списков бит-init (т.е. чистых списков инициализаторов; обратите внимание, что имя_файла , за которым следует список команд, например, bar {2,5,"hello",7}, является выражением.)

Для того, чтобы удобно использовать чистые списки инициализаторов, стандарт определяет различные исключения, которые суммируются в следующей (ненормативной) заметке:

§8.5.4 / 1 [...] Примечание: Инициализация списка может использоваться как инициализатор в определении переменной (8.5) - как инициализатор в новом выражении (5.3.4) - в операторе return (6.6.3) - в качестве аргумента функции (5.2.2) - в качестве индекса (5.2.1) - в качестве аргумента для вызова конструктора (8.5, 5.2.3) - в качестве инициализатора для нестатического элемента данных (9.2) - в mem-инициализаторе (12.6.2) - справа - (5.17) [...]

Четвертый пункт выше явно разрешает чистые инициализационные списки как аргументы функции (поэтому работает operator<<(baz, {1, -2, "foo", 4, 5});), пятый - в выражении в нижнем индексе (т. как аргумент operator[], например. mymap[{2,5,"hello"}] является законным), а последний элемент разрешает их в правой части присвоений (но не общих двоичных операторов).

Не существует такого исключения для двоичных таких как +, * или <<, поэтому вы не можете поместить чистый список инициализаторов (то есть тот, которому не предшествует имя типа) по обе стороны от них.

Что касается причины этого, черновик / дискуссионный документ N2215 от Stroustrup и Dos Reis с 2007 года дают много информации о многих проблемах с списками инициализаторов в различных контекстах. В частности, существует раздел о бинарных операторах (раздел 6.2): ​​

Рассмотрим более общее использование списков инициализаторов. Например:

v = v+{3,4};
v = {6,7}+v;

Когда мы рассматриваем операторы как синтаксический сахар для функций, мы, естественно, рассмотрим вышеупомянутый эквивалент

v = operator+(v,{3,4});
v = operator+({6,7},v);

. Поэтому естественно расширить использование инициализатора списки в выражения. Существует много применений, когда списки инициализаторов в сочетании с операторами являются «естественными» обозначениями. Однако нетривиально написать грамматику LR (1), которая позволяет произвольно использовать списки инициализаторов. Блок также начинается с {, поэтому включение списка инициализаторов в качестве первого (самого левого) объекта выражения приведет к хаосу в грамматике. Тривиально разрешить списки инициализаторов в качестве правого операнда двоичных операторов, индексов и аналогичных изолированных частей грамматики. Реальная проблема заключается в том, чтобы разрешить ;a={1,2}+b; как оператор присваивания без разрешения ;{1,2}+b;. Мы подозреваем, что разрешить списки инициализаторов как правые, но и [sic] как левые аргументы большинству операторов - это слишком много kludge, [...]

Другими словами , списки инициализаций не включены в правой части , поскольку они не включены с левой стороны , и они не включены с левой стороны, потому что это могло бы стать слишком большим проблема для парсеров.

Интересно, можно ли упростить эту проблему, выбрав другой символ вместо фигурных скобок для синтаксиса списка инициализаторов.

247
задан Taryn 22 March 2017 в 17:16
поделиться

24 ответа

Похоже, что что-то не так с вашей конфигурацией, вот несколько вещей, которые вы можете проверить:

  1. Убедитесь, что PHP установлен и работает правильно. Это может показаться глупым, но вы никогда не знаете. Простой способ проверить - запустить php -v из командной строки и посмотреть, возвращает ли информация о версии или какие-либо ошибки.
  2. Убедитесь, что модуль PHP указан и раскомментирован внутри вашего httpd.conf Apache. должно быть что-то вроде LoadModule php5_module "c:/php/php5apache2_2.dll" в файле. Найдите LoadModule php и убедитесь, что перед ним нет комментария (;).
  3. Убедитесь, что в файле httpd.conf Apache есть PHP MIME-тип. Это должно быть что-то вроде AddType application/x-httpd-php .php. Это говорит Apache, чтобы запустить .php файлы как PHP. Найдите AddType, а затем убедитесь, что есть запись для PHP, и что она раскоментирована.
  4. Убедитесь, что ваш файл имеет расширение .php на нем или любое расширение, указанное в определении MIME в point # 3, иначе он не будет выполняться как PHP.
  5. Убедитесь, что вы не используете короткие теги в файле PHP (<?), это не включен на всех серверах по умолчанию, и их использование не рекомендуется. Вместо этого используйте <?php (или включить короткие теги в вашем php.ini с short_open_tag=On, если у вас есть код, который их использует).
  6. Убедитесь, что вы обращаетесь к своему файлу через ваш веб-сервер, используя URL-адрес, такой как http://localhost/file.php, не через доступ к локальному файлу file://localhost/www/file.php

И, наконец, проверьте Руководство по PHP для дальнейших советов по настройке .

320
ответ дан Quentin 16 August 2018 в 11:02
поделиться
  • 1
    Не знаю, почему, но установщик PHP 5.3.15 не добавляет строку AddType application/x-httpd-php .php. Большое спасибо!! – MatuDuke 25 July 2012 в 03:03
  • 2
    @shmeeps: Где вы видели, что короткие теги устарели? Я сделал некоторые поиски и могу только найти рекомендации против них, ничего не сказать об устаревании. Предоставляемые для приложений, которые должны быть распространены, лучше использовать & lt; php в случае, если сервер хостинга не имеет их включен, но для приложений, где у вас есть полный контроль над сервером, на котором они будут работать, не вижу причин не использовать их. – ClarkeyBoy 28 October 2013 в 18:35
  • 3
    точка № 6 работала для меня .. локальный доступ не использует сервер Apache – KawaiKx 6 July 2014 в 16:24
  • 4
    пункт 2 работал для меня безопасным способом - apt-get purge apache2; apt-get install apache2 libapache-mod-php5 – ulkas 16 September 2014 в 21:41
  • 5
    @full_prog_full Попробуйте загрузить файл с расширением .php с содержимым <?php echo("Success"); ?> и посмотреть, приводит ли к нему доступ к файлу через веб-браузер в & quot; Success & quot; отображается без соответствующего кода PHP. – shmeeps 18 April 2016 в 03:29

Я столкнулся с этой проблемой на php 7.1, который поставляется с High Sierra (OS X 10.13.5), редактирование /etc/apache2/httpd.conf со следующими изменениями помогло:

  1. Раскомментировать эту строку
    LoadModule php7_module libexec/apache2/libphp7.so
    
  2. Вставить пасту в конце
    <IfModule php7_module>
        AddType application/x-httpd-php .php
        AddType application/x-httpd-php-source .phps
    
        <IfModule dir_module>
            DirectoryIndex index.html index.php
        </IfModule>
    </IfModule>
    
0
ответ дан AamirR 16 August 2018 в 11:02
поделиться

У меня был случай, когда я случайно начал разворачивать каталог файлов в корне. Он добавил файл .htaccess из моей папки с файлами, который блокирует все php

# If we know how to do it safely, disable the PHP engine entirely.
<IfModule mod_php5.c>
  php_flag engine off
</IfModule>

. Нижняя строка проверяет файл .htaccess на root.

0
ответ дан albertski 16 August 2018 в 11:02
поделиться

Я нашел еще одну проблему, вызвавшую эту проблему, и уже решил ее. Я случайно сохранил свой скрипт в кодировке UTF-16. Похоже, что PHP5 не может распознать тег <?php в 16-битной кодировке по умолчанию.

19
ответ дан Arrvi 16 August 2018 в 11:02
поделиться

Добавить AddType application/x-httpd-php .php в файл httpd.conf, если вы используете Apache 2.4

0
ответ дан Ashahmali 16 August 2018 в 11:02
поделиться

Для меня работала переустановка модуля mcrypt.

$sudo apt-get install php5-mcrypt
$sudo php5enmod mcrypt
0
ответ дан b.g 16 August 2018 в 11:02
поделиться
  • 1
    Это честно, может быть, потому, что я не правильно настроил PHP на моей системе. Но поскольку вопрос, который я задал по той же проблеме, был отмечен как дубликат этого вопроса, я мог бы ответить на него здесь. Интересно, почему голос? – b.g 17 October 2016 в 13:06
  • 2
    Этот ответ связан с linux, в котором тема, очевидно, использует окна – Raymond Nijland 24 April 2017 в 11:55

Убедитесь, что сценарий содержит

<?php

перед кодом, который должен быть выполнен. Между <? и php в этом не должно быть пробелов.

-1
ответ дан Barmar 16 August 2018 в 11:02
поделиться

Я решил это, удалив XAMPP и установив WAMP. Спасибо за помощь.

3
ответ дан Dummy00001 16 August 2018 в 11:02
поделиться

note для пользователей php 7, добавьте это в свой файл httpd.conf:

# PHP 7 specific configuration
<IfModule php7_module>
    AddType application/x-httpd-php .php
    AddType application/x-httpd-php-source .phps
    <IfModule dir_module>
        DirectoryIndex index.html index.php
    </IfModule>
</IfModule>
19
ответ дан EdC 16 August 2018 в 11:02
поделиться
  • 1
    Ты спас мой день. Спасибо, 3 – theRana 13 May 2018 в 18:52
  • 2
    Просто чтобы помочь другим людям с этой проблемой. Файл httpd.conf находится в /etc/apache2/httpd.conf. Если вы используете Ubuntu, это будет apache2.conf в том же каталоге, который необходимо изменить для PHP7. – Ahmed Sagarwala 14 August 2018 в 19:07

Для новой настройки LAMP running php 7 отредактируйте файл /etc/httpd/conf/httpd.conf. Примечание. Обязательно сделайте резервную копию для него перед тем, как что-либо изменить.

Вставьте это в самое нижнее файла:

<IfModule php7_module>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
<IfModule dir_module>
    DirectoryIndex index.html index.php
</IfModule>

Затем найдите LoadModule и вставьте следующую строку:

LoadModule php7_module modules/libphp7.so

Эта строка просто попросит httpd загрузить модуль php 7

Затем перезапустите httpd

1
ответ дан Eric Libay 16 August 2018 в 11:02
поделиться

Я запускаю Apache на Ubuntu, и моя проблема в том, что файл /etc/apache2/mods-available/php5.conf отсутствовал:

<FilesMatch ".+\.ph(p[345]?|t|tml)$">
    SetHandler application/x-httpd-php
</FilesMatch>

Я добавил его обратно, а php правильно обрабатывал файлы php.

27
ответ дан Flow 16 August 2018 в 11:02
поделиться

О Боже! Я только что видел ваше опубликованное изображение снова, вы просто открываете свой php-файл в браузере. у вас есть open, использующий localhost url. если вы открываете файл непосредственно из своего каталога, он не будет выполнять php-код в любом случае.

use: http://locahost/index.php или http:127.0.0.1/index.php

включить php-код в вашем случае , вы используете <?, который является коротким кодом php для <?php

, по умолчанию короткие короткие коды php отключены.

также используют: sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt, если вы являетесь пользователем ubuntu .

11
ответ дан Hasan Baig 16 August 2018 в 11:02
поделиться
  • 1
    Почему mcrypt требуется, когда я просто включаю файл? Вы должны заметить, что этот вопрос старый, а проблема с короткими тегами упоминалась 16 раз, также в верхнем комментарии моего вопроса. – Gui 6 December 2016 в 17:20
  • 2
    Я просто делюсь своим решением, у меня также была такая же ошибка, и после выполнения этой команды mcrypt моя проблема решена. вы также можете попробовать. – Hasan Baig 7 December 2016 в 08:43
  • 3
    по умолчанию включены короткие короткие коды php. short_open_tag = On (Значение по умолчанию = ON) в php 5.6 – zond 26 January 2017 в 14:38

Я отправляю этот ответ, потому что мой интерфейс администратора Virtualmin / Webmin решил, что было бы неплохо отключить мой PHP-движок. Я нашел время, чтобы найти решение, поэтому я решил поделиться с ним вы, ребята:

Также не забудьте проверить, что ни один из ваших конфигурационных файлов вашего сайта, связанных с этим конкретным хостом или виртуальным хостом, не имеет в них php_admin_value, которые отключают PHP, например:

php_admin_value engine Off

В случае сомнений прокомментируйте это ...

# php_admin_value engine Off

И перезагрузите свой веб-сервер.

14
ответ дан Henry van Megen 16 August 2018 в 11:02
поделиться
  • 1
    Где эти настройки конфигурации точно? – cronoklee 27 July 2016 в 14:43
  • 2
    @cronoklee В настройках vHost httpd.conf. Для существующих хостов вам необходимо изменить конфигурацию apache в webmin. Для будущих хостов перейдите в virtualmin & gt; шаблон сервера & gt; веб-сайт apache. В то же время это не так безопасно, как fastcgi - defaultmin по умолчанию. Поэтому правильный подход должен заключаться в устранении неполадок, почему fcgi не работает, например, это может быть вызвано правами доступа к файлам. – Sheepy 9 September 2016 в 03:43
  • 3
    Если вы используете версию Apache, которая не имеет httpd.conf, посмотрите в /etc/apache2/mods-enabled/php7.conf или php5.conf – LXXIII 20 October 2016 в 22:53
  • 4
    Когда вы сомневаетесь в местоположении определенного параметра конфигурации, вы всегда можете использовать grep, чтобы найти то, что вы ищете (например, в этом случае): sudo grep php_admin_value /etc/* -R – Henry van Megen 23 May 2018 в 11:05

Это было в моем .htaccess

DirectoryIndex index.html index.htm

index.html, содержащем PHP-код. По умолчанию PHP не будет обрабатывать файлы с такими расширениями, как htm *, как PHP-код.

Вы можете переопределить это, добавив следующее в .htaccess:

<FilesMatch ".+\.html$">
    SetHandler application/x-httpd-php
</FilesMatch>
1
ответ дан Jahmic 16 August 2018 в 11:02
поделиться

Проверьте все пакеты, которые вы установили для php, используя:

yum list installed | grep remi

Установите все соответствующие пакеты php, особенно php-devel на вашем компьютере.

2
ответ дан Jai Kumar Rajput 16 August 2018 в 11:02
поделиться

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

из скриншота u отправил его на ур компьютер не на localhost.

"file: ///" это должен быть "localhost /"

0
ответ дан Nav 16 August 2018 в 11:02
поделиться

Это произошло со мной снова, вместе с сервером, загружающим html-файлы, а не обработкой. Я не использовал веб-сервер Apache некоторое время на компьютере, а между тем Ubuntu обновлялся как еще две версии изначально установленных LTS. Теперь это

$ cat /etc/issue
Ubuntu 16.04 LTS

Итак, php работал так:

$ sudo apt-get install lamp-server^
$ sudo a2enmod php7.0
$ sudo service apache2 restart 

Теперь веб-сервер разбирал php. Возможно, теперь вам нужно обновить некоторые веб-страницы, так как теперь php7.0 работает там, где это было до запуска php5. О, хорошо.

3
ответ дан ndasusers 16 August 2018 в 11:02
поделиться
  • 1
    вы просто переустановили весь сервер. – RozzA 10 May 2017 в 21:38

У меня была аналогичная проблема, но в моем случае решение было другим. мой файл, который содержал php-код, назывался «somename.html», изменил его на «somename.php», работал отлично

3
ответ дан Netrus 16 August 2018 в 11:02
поделиться
  • 1
    Это также решило это для меня. Кто-нибудь знает, будет ли сервер выполнять php в .html-файле или окончание файла всегда нужно изменить на .php, когда есть строка php для выполнения? – full_prog_full 10 November 2016 в 15:42
  • 2
    зависит от настроек сервера, для большинства случаев выполняется PHP-код, существующий в файле anyfile.html. и если это не так, его можно изменить, хотя idk как: P – Netrus 4 December 2016 в 17:49

на моем ubuntu 14.04, apache 2.4, php 5.5.9 install, я попробовал с sample.php on / var / www / html (root по умолчанию), и он работал нормально. Таким образом, проблема была в моей конфигурации виртуальных серверов. Решение заключалось в том, чтобы включить в директорию def, содержащую .php, следующую строку:

    php_admin_flag engine on
2
ответ дан Rogelio 16 August 2018 в 11:02
поделиться
  • 1
    и где я должен добавить эту строку в файл Apache в httpd.conf моего виртуального сервера? и я использую Webmin – suresh pareek 21 August 2017 в 12:45

php7:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php7.0-fpm
sudo service apache2 restart
28
ответ дан sj59 16 August 2018 в 11:02
поделиться
  • 1
    Хотя этот фрагмент кода может решить вопрос, в том числе объяснение how и why , это решает проблему , действительно поможет улучшить качество вашей после. Помните, что вы отвечаете на вопрос читателей в будущем, а не только на человека, который спрашивает сейчас! Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, и укажите, какие ограничения и допущения применяются. – Toby Speight 6 February 2017 в 19:31
  • 2
    Этот ответ связан с linux, в котором тема-сервер явно использует окна. – Raymond Nijland 24 April 2017 в 11:53
  • 3
    @RaymondNijland правда, но это канонически, и я нашел этот вопрос, и он спас меня после часа устранения неполадок. – Goose 5 May 2017 в 20:57
  • 4
    Как и почему: Это происходит, когда PHP7 не настраивает службу fast-CGI по умолчанию в сценарии make. sudo a2enmod proxy_fcgi setenvif создает три новые моды /mods-available/proxy.conf proxy_fcgi.load proxy.load Аналогично, sudo a2enconf php7.0-fpm создает файл конфигурации /conf-available/php7.0-fpm.conf. Как только это будет сделано, и Apache2 сможет затем запустить модуль PHP7 в качестве службы быстрого CGI. – Talvi Watia 21 November 2017 в 13:49
  • 5
    работал на linux mint – zzapper 21 January 2018 в 00:41

Я знаю, что это должно звучать глупо ... но редко бывает.

Проверьте, пытаетесь ли вы выполнить php из

**http://localhost/info.php**

, а не из

file:///var/www/info.php

ps> вы можете заметить, что если вы пишете из shell

php info.php 

, то ответьте на код (это означает php-функции) ..

5
ответ дан user3257072 16 August 2018 в 11:02
поделиться
  • 1
    PHP работает нормально (проверено с помощью командной строки). но, когда я получаю доступ к файлу с помощью URL-адреса, он показывает PHP-код. – muaaz 17 June 2015 в 08:08

Если у вас есть такая конфигурация:

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot "/var/www/example.com"

    <FilesMatch "\.php$">
        SetHandler "proxy:fcgi://127.0.0.1:9000"
    </FilesMatch>
</VirtualHost>

Раскомментируйте следующие строки в вашем httpd.conf

LoadModule proxy_module lib/httpd/modules/mod_proxy.so
LoadModule proxy_fcgi_module lib/httpd/modules/mod_proxy_fcgi.so

Это работает для меня

0
ответ дан user3890355 16 August 2018 в 11:02
поделиться
0
ответ дан bobble bubble 29 October 2018 в 11:57
поделиться
0
ответ дан sh6210 29 October 2018 в 11:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: