Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: модуль php для apache не может отправить почту

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
v4567
Отправлено: 20 Ноября, 2016 - 18:58:14
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




Есть система lfs версии 7.0
В ней из исходников собран apache версии 2.4.18 и php версии 5.5.13
Мне нужен был только модуль для apache и не нужен был php интерпретатор, но собрать без интерпретатора так и не получилось (в моём вопросе отправки почты - интерпретатор, помог выяснить некоторый вопрос), собирал несколько раз, то собрал без графической библиотеки и капча не работала, то ещё без каких то библиотек. На сборку потратил кучу времени, но в конце концов собрал и всё заработало.
Собирал apache вот с такими опциями:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ./configure --enable-authnz-fcgi \
  3. --enable-layout=LFS \
  4. --enable-mods-shared="all cgi" \
  5. --enable-mpms-shared=all \
  6. --with-apr=/usr/bin/apr-1-config \
  7. --with-apr-util=/usr/bin/apu-1-config \
  8. --enable-suexec=shared \
  9. --with-suexec-bin=/usr/lib/httpd/suexec \
  10. --with-suexec-docroot=/srv/apache \
  11. --with-suexec-caller=apache \
  12. --with-suexec-userdir=public_html \
  13. --with-suexec-logfile=/var/log/httpd/suexec.log \
  14. --with-suexec-uidmin=100
  15.  

php собирал вот с такими опциями:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. ./configure --prefix=/usr \
  3. --sysconfdir=/etc \
  4. --localstatedir=/var \
  5. --with-apxs2=/usr/bin/apxs \
  6. --datadir=/usr/share/php \
  7. --mandir=/usr/share/man \
  8. --disable-ipv6 \
  9. --enable-dba \
  10. --enable-dba=shared \
  11. --with-gdbm \
  12. --enable-maintainer-zts \
  13. --enable-fpm \
  14. --with-fpm-user=apache \
  15. --with-fpm-group=apache \
  16. --with-config-file-path=/etc \
  17. --with-pcre-regex=/usr \
  18. --with-zlib \
  19. --enable-bcmath \
  20. --with-bz2 \
  21. --enable-calendar \
  22. --with-curl \
  23. --enable-exif \
  24. --enable-ftp \
  25. --with-kerberos \
  26. --with-t1lib \
  27. --with-gettext \
  28. --with-gmp \
  29.  --with-ldap-sasl \
  30.  --without-pdo-sqlite \
  31. --with-pspell \
  32. --with-readline \
  33. --with-snmp \
  34. --with-iconv \
  35. --with-openssl \
  36. --with-openssl-dir=/usr \
  37. --with-gd=/usr \
  38. --with-jpeg-dir=/usr \
  39. --with-png-dir=/usr \
  40. --with-zlib-dir=/usr \
  41. --with-freetype-dir=/usr \
  42. --with-mysql \
  43. --with-mysql-sock=/var/run/mysql \
  44. --enable-sockets \
  45. --with-mysql=mysqlnd \
  46. --with-mysqli \
  47. --with-mysqli=mysqlnd \
  48. --with-pdo-mysql \
  49. --with-pdo-mysql=mysqlnd \
  50.   --enable-mbstring
  51.  

До сборки apache и php пришлось собрать вот такие пакеты программ:
valgrind-3.9.0.tar.bz2
apr-1.5.0.tar.bz2
apr-util-1.5.3.tar.bz2
xproto-7.0.26.tar.gz
xextproto-7.3.0.tar.gz
xtrans-1.3.4.tar.gz
xcb-proto-1.10.tar.bz2
util-macros-1.19.0.tar.bz2
dmxproto-2.3.1.tar.bz2
inputproto-2.3-1.tar.bz2
kbproto-1.0.6-1.tar.bz2
libXau-1.0.8.tar.bz2
libpthread-stubs-0.1.tar.bz2
libxcb-1.10.tar.bz2
xf86bigfontproto-1.2.0.tar.bz2
xf86dgaproto-2.1.tar.bz2
xf86driproto-2.1.1.tar.bz2
xf86miscproto-0.9.3.tar.bz2
xf86rushproto-1.1.2.tar.bz2
xf86vidmodeproto-2.3.1.tar.bz2
xineramaproto-1.2.1.tar.bz2
libX11-1.6.2.tar.gz
libXpm-3.5.11.tar.bz2
yasm-1.2.0.tar.gz
libvpx-v1.3.0.tar
libgd-2.1.0.tar
t1lib-5.1.2.tar.gz
Без этих пакетов ни apache ни php не собирался.
После установки всего этого, поверил работу apache и php взял работающий сайт написанный на cms с базой данный - mysql. Всё работало отлично, работало с базой данный записывались, выбирались из базы и т. д. Работала капча.
phpinfo в прикреплённом файле phpinfo.mht

Вот файл из которого пытаюсь отправить почту:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. <?php
  3. set_error_handler('err_handler');
  4. function err_handler($errno, $errmsg, $filename, $linenum)
  5. {
  6. $date = date('Y-m-d H:i:s (T)');
  7. $f = fopen('errors.txt', 'a');
  8. if (!empty($f))
  9. {
  10. $filename =str_replace($_SERVER['DOCUMENT_ROOT'],'',$filename);
  11. $err = "$errmsg = $filename = $linenum\r\n";
  12. fwrite($f, $err);
  13. fclose($f);
  14. }
  15. }
  16. error_reporting(E_ALL);
  17. ini_set('log_errors', 'On');
  18. ini_set('error_log', '/var/log/httpd/php_errors.log');
  19. ini_set("display_errors", "1");
  20. try
  21. {
  22. if (mail("xxxxx@xxxx.xx", "test111", "test222"))
  23. {
  24. echo "Почта работает.";
  25. }
  26. else
  27. {
  28. echo "Почта не работает.";
  29. }
  30. }
  31. catch (Exception $exc)
  32. {
  33. error_log($exc->getMessage());
  34. }
  35. ?>
  36.  


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

В php.ini включил следующие опции:
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
log_errors = On
error_log = /var/log/httpd/php_errors.log
mail.log = /var/log/httpd/php_mail.log
SMTP = localhost
smtp_port = 465
sendmail_path = /usr/local/sbin/ssmtp -t

При запуске apache в файле error.log пишется вот что:
CODE (text):
скопировать код в буфер обмена
  1.  
  2. [Sun Nov 20 18:37:45.524273 2016] [mpm_event:notice] [pid 23986:tid 3074820368] AH00491: caught SIGTERM, shutting down
  3. No log handling enabled - using stderr logging
  4. MIB search path: $HOME/.snmp/mibs:/usr/local/share/snmp/mibs
  5. Cannot find module (SNMPv2-MIB): At line 0 in (none)
  6. Cannot find module (IF-MIB): At line 0 in (none)
  7. Cannot find module (IP-MIB): At line 0 in (none)
  8. Cannot find module (TCP-MIB): At line 0 in (none)
  9. Cannot find module (UDP-MIB): At line 0 in (none)
  10. Cannot find module (HOST-RESOURCES-MIB): At line 0 in (none)
  11. Cannot find module (NOTIFICATION-LOG-MIB): At line 0 in (none)
  12. Cannot find module (DISMAN-EVENT-MIB): At line 0 in (none)
  13. Cannot find module (DISMAN-SCHEDULE-MIB): At line 0 in (none)
  14. Cannot find module (UCD-SNMP-MIB): At line 0 in (none)
  15. Cannot find module (UCD-DEMO-MIB): At line 0 in (none)
  16. Cannot find module (SNMP-TARGET-MIB): At line 0 in (none)
  17. Cannot find module (NET-SNMP-AGENT-MIB): At line 0 in (none)
  18. Cannot find module (HOST-RESOURCES-TYPES): At line 0 in (none)
  19. Cannot find module (SNMP-MPD-MIB): At line 0 in (none)
  20. Cannot find module (SNMP-USER-BASED-SM-MIB): At line 0 in (none)
  21. Cannot find module (SNMP-FRAMEWORK-MIB): At line 0 in (none)
  22. Cannot find module (SNMP-VIEW-BASED-ACM-MIB): At line 0 in (none)
  23. Cannot find module (SNMP-COMMUNITY-MIB): At line 0 in (none)
  24. Cannot find module (IP-FORWARD-MIB): At line 0 in (none)
  25. Cannot find module (NET-SNMP-PASS-MIB): At line 0 in (none)
  26. Cannot find module (NET-SNMP-EXTEND-MIB): At line 0 in (none)
  27. Cannot find module (UCD-DLMOD-MIB): At line 0 in (none)
  28. Cannot find module (SNMP-NOTIFICATION-MIB): At line 0 in (none)
  29. Cannot find module (SNMPv2-TM): At line 0 in (none)
  30. Cannot find module (NET-SNMP-VACM-MIB): At line 0 in (none)
  31. [Sun Nov 20 18:37:48.829030 2016] [mpm_event:notice] [pid 25990:tid 3075352848] AH00489: Apache/2.4.18 (Unix) PHP/5.5.13 configured -- resuming normal operations
  32. [Sun Nov 20 18:37:48.829191 2016] [core:notice] [pid 25990:tid 3075352848] AH00094: Command line: '/usr/sbin/httpd'
  33.  


Когда в браузере открываю этот сайт то почта не отправляется.
Срабатывает коммутатор if и выводится:
"Почта не работает."
В логаг тишина.
В access.log для этого сайта.
xx.xx.xx.xx - - [20/Nov/2016:18:42:04 +0200] "GET / HTTP/1.1" 200 33 "-" "Opera/x.xx (X11; Linux i686) Presto/x.xx.xxx Version/xx.xx"
В error.log для этого сайта ничего нет.
В access.log общий для apache ничего нет.
В error.log общий для apache новых записей нет, кроме старых приведённых выше после запуска apache.
В fpm-php.log ничего нет.
В php_errors.log ничего нет.
В php_mail.log
[20-Nov-2016 18:43:58 Europe/Kiev] mail() on [/xxxx/xxx/xxxxxx/xxx/xxxx.xx/index.php:21]: To: xxxx@xxxx.xx -- Headers:.

Если php файл, в котором я пытаюсь отправить почту, передать php интерпретатору php -f < index.php то почта отправляется!!!!

Получается php модуль для apache почту не может отправить, а php интерпретатор почту отправляет.

Подскажите хоть в каком направлении смотреть, или как ещё можно включить логи, что бы хоть что нибудь написало....

За помощь заранее благодарен!

PS. Что бы не раскрывать некоторые данные, я их заменил иксами.
Скачать файл: phpinfo.mht
Скачан раз: 87
 
 Top
v4567
Отправлено: 21 Ноября, 2016 - 11:01:40
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Сент. 2008  


Помог: 0 раз(а)




Глянув в системные логи mail.log и sys.log (как включить логирование в самом ssmtp я так и не нашёл) увидел что ssmtp при запуске интерпретатора php запускается от рута и в логах пишется что пользователь root.
А когда я письмо отправляю через сайт то ssmtp запускается от пользователя apache. В общем надо было подправить конфиги ssmtp.
В файле /usr/local/etc/ssmtp/revaliases
вместо строки:
root:xxxxxx@ukr.net:smtp.ukr.net:465
вписать или дописать строку:
apache:xxxxxx@ukr.net:smtp.ukr.net:465
А в файле:
/usr/local/etc/ssmtp/ssmtp.conf
строку:
root=xxxxxx@ukr.net # от чьего имени шлем письма
можно оставить, можно удалить, а можно поменять на:
apache=xxxxxx@ukr.net # от чьего имени шлем письма

и тогда всё заработает.

И ещё. У меня apache работает в chroot. В этом же chroot находится и ssmtp.
Так вот для работы ssmtp нужен ещё и bash, но обязательно что бы он назывался не bash, а sh. Нужно переименовать bash в sh или создать ссылку sh на bash. Конфиги пользователей .bashrc .profile и т. д. как и сами домашние директории пользователей от которых запускается ssmtp, а так же домашняя директория root и файлы /etc/bashrc /etc/profile не нужны.
Необходимо только наличие всех необходимых библиотек для баша libhistory.so и т.д. Также нужны файлы /etc/passwd /etc/group /etc/shadow с пользователем от которого запускается apache, в моём случае это пользователь apache. Так же ещё нужны все необходимые библиотеки для apache, php и ещё некоторые файлы.

Всё вопрос решённый тему можно закрывать.
(Добавление)
кнопку вопрос решён не нашёл
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB