我尝试使用 phpmail()函数发送电子邮件,但不知何故失败,抱怨需要真实域名。在邮件日志中观察到以下内容:
sendmail 4984 r25984:from=apache,size=273,class=0,nrcpts=1,msgid=<201.r25@localhost.localdomain>,relay=apache@localhost
sendmail 4985 r25985:规则集=check_mail,arg1=,relay= mydomain.com [127.0.0.1], reject=553 5.5.4 ... 发件人地址需要真实域名
sendmail 4984 r25984: to=external@server.com, ctladdr=apache (48/48), delay=00: 00:01,xdelay=00:00:00,mailer=relay,pri=30273,relay=[127.0.0.1] [127.0.0.1],dsn=5.6.0,stat=数据格式错误
sendmail 4984 r25984:r259 DSN:数据格式错误
每当 logrotate 出现问题时,cron 都能够向 external@server.com 发送电子邮件。我不确定为什么 php 无法这样做。我尝试使用以下内容更改 `sendmail.mc 中的默认配置:
MASQUERADE_AS(`mydomain.com')dnl
FEATURE(masquerade_envelope)dnl
FEATURE(masquerade_entire_domain)dnl
MASQUERADE_DOMAIN(localhost)dnl
MASQUERADE_DOMAIN(localhost.localdomain)dnl
MASQUERADE_DOMAIN(mycom)dnl
Run Code Online (Sandbox Code Playgroud)
但是,它似乎没有任何影响。php 邮件功能中的地址标题已经设置好了。我还确保httpd_can_sendmail启用了 SELinux 。我还需要做什么才能使邮件送达?
我目前正在使用 Nginx 和 PHP-FPM 测试 Symfony2。我也使用 Xdebug。
Symfony2 带有一个 Demo 包,我想通过在 Acme/Demo 包中创建一个语法错误来测试 Symfony 2.2.0 附带的致命错误的新处理。为什么我这样做,服务器响应是 502 bad gateway。
但是如果我在文件 app_dev.php 中出现语法错误(所以在框架被触发之前),那么 Xdebug 会告诉我致命错误。
令人惊讶的是,如果我修复了那个错字,然后在 Acme/Demo 包中重新创建语法错误,那么 Symfony 错误处理程序就会按预期出现。最后,如果修复所有错别字(页面有效),然后再次重新创建相同的错字(再次在 Acme/Bundle 中),我会得到一个错误的网关。
你有什么线索吗?
为什么 PHP/Apache 组合会执行如此多的gettimeofday系统调用?即使很快,每个电话都是应该考虑的电话。
只是一个快速strace -c -p [apache2 process id],给出以下内容:
Process 22294 detached
% time seconds usecs/call calls errors syscall
------ ----------- ----------- --------- --------- ----------------
98.52 0.010000 51 196 poll
1.48 0.000150 0 20752 gettimeofday
0.00 0.000000 0 94 7 read
0.00 0.000000 0 48 write
0.00 0.000000 0 96 32 open
0.00 0.000000 0 75 close
0.00 0.000000 0 6 chdir
0.00 0.000000 0 766 time
0.00 0.000000 0 2 chmod
0.00 0.000000 0 56 …Run Code Online (Sandbox Code Playgroud) 我试图找出在我的服务器上发送电子邮件的电子邮件程序(如果有)。我的雇主有几台服务器,其中大部分使用sendmail,但在我们的两台服务器上,我没有找到电子邮件程序,但不知何故电子邮件已发送?我不希望只安装sendmail如果事情是已经建立,我只是不确定如何找出什么是安装程序。服务器是Ubuntu Server 12.04 LTS,我使用的是PHPmail()命令。
我能找到的唯一信息来尝试回答我的问题是思南的问题:如何找出正在发送电子邮件的程序。我在那里尝试了两个答案,但一无所获。
which mail什么都不做,/var/log/mail.log完全是空的。
我尝试使用strace ./mail-testing-strace.php查看执行此文件时发生的情况,但我一直收到“权限被拒绝”,如下所示:
execve("./mail-testing-strace.php", ["./mail-testing-strace.php"], [/* 19 vars */]) = -1 EACCES (Permission denied)
dup(2) = 3
fcntl64(3, F_GETFL) = 0x8002 (flags O_RDWR|O_LARGEFILE)
fstat64(3, {st_mode=S_IFCHR|0620, st_rdev=makedev(136, 0), ...}) = 0
mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb77ca000
_llseek(3, 0, 0xbfa1ae34, SEEK_CUR) = -1 ESPIPE (Illegal seek)
write(3, "strace: exec: Permission denied\n", 32strace: exec: Permission denied
) = …Run Code Online (Sandbox Code Playgroud) nginx 正在通过 fastcgi 连接到 php-fpm,使用/etc/nginx/fastcgi_params位置块中的标准。
当从命令行连接到 /.status (php-fpm.ini::ping.path) 时cgi-fcgi -bind,结果按预期返回(X-Powered-By 设置、响应正文等)。
当使用 nginx 请求时,结果返回空(X-Powered-By 设置,没有正文长度或内容)。nginx 返回 200,因为它得到了“有效”响应。
监视 tcpdump,我在它们的 FCGI 标头中隔离了对奇偶校验的请求(减去仍由 shell 设置的用户相关环境变量。)
我安装了 LDAP 开发标头:
apt-get install libldb-dev
这添加了一些 ldap 标头:
root@crunchbang:/usr/include# ls -la ldap*
-rw-r--r-- 1 root root 9466 Apr 23 2013 ldap_cdefs.h
-rw-r--r-- 1 root root 1814 Apr 23 2013 ldap_features.h
-rw-r--r-- 1 root root 65213 Apr 23 2013 ldap.h
-rw-r--r-- 1 root root 9450 Apr 23 2013 ldap_schema.h
-rw-r--r-- 1 root root 3468 Apr 23 2013 ldap_utf8.h
Run Code Online (Sandbox Code Playgroud)
当我配置和引用目录时:
./configure --with-ldap=/usr/include
我收到此错误:
...
checking for LDAP support... yes
checking for LDAP Cyrus SASL support... no
checking size of long int... …Run Code Online (Sandbox Code Playgroud) 我一直在玩 docker 和 docker-compose 并有一个问题。
目前我的 docker-compose.yml 看起来像这样:
app:
image: myname/php-app
volumes:
- /var/www
environment:
<SYMFONY_ENVIRONMENT>: dev
web:
image: myname/nginx
ports:
- 80
links:
- app
volumes_from:
- app
Run Code Online (Sandbox Code Playgroud)
应用程序包含端口 9000 上的 php-fpm 和我的应用程序代码。Web 是带有一些配置的 nginx。
这如何发挥我所期望的功能,但是为了将 nginx 连接到 php-fpm 我有这一行:
fastcgi_pass app:9000;
Run Code Online (Sandbox Code Playgroud)
我怎样才能有效地扩展它?例如,如果我想要运行一个 nginx 容器但运行三个应用程序容器,那么我肯定会有三个 php-fpm 实例都试图侦听端口 9000。
如何在不同的端口上拥有每个 php-fpm 实例,但仍然知道它们在任何给定时间在我的 nginx 配置中的位置?
我采取了错误的方法吗?
谢谢!
我已经使用以下网址安装了 RHSCL 2:
使用 RedHat 订阅管理器。
然后我跑了yum remove php*跟着yum install rh-php56
一切都很顺利,除了现在在任何地方都找不到 PHP。然后我运行find / -name php并rh-php56在以下目录中找到:
/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/register.content/var/opt/rh/rh-php56/lib/php
/opt/rh/rh-php56/root/usr/bin/php
/opt/rh/rh-php56/root/usr/lib64/php
/opt/rh/rh-php56/root/usr/share/php
Run Code Online (Sandbox Code Playgroud)
将这些二进制文件放入/usr/bin通常对所有用户全局可用的任何其他目录中的最佳方法是什么?
安装软件包时我是否错过了一个步骤,这就是为什么它在全球范围内不可用?或者这只是使用 RHSCL 时发生的情况?
我已经测试了这些文件夹中的二进制文件,它们在我运行php -v时可以正常工作,因此工作正常。
我的第一个想法是cp进入/bin或者/usr/bin但也许有一种官方的方式来做我的要求?
编辑
无法评论,没有代表...来自我发布的链接的第 3 章,它说软件集合包必须像这样运行:
scl enable rh-php56 'php -v'
哪个有效......但是我如何让它在$ php -v没有额外命令的情况下为所有用户运行。我需要全局可用的 php 二进制文件,以便网络服务器可以使用它,并且 ssh 用户可以使用普通 shell。
是否可以为 php (cli) 和 php-fpm 创建单独的 php.ini 文件,就像在 debian 和 ubuntu 上可以使用两个文件夹/etc/php/7.0/cli和/etc/php/7.0/fpm?
如果我可以conf.d为每个子系统加载带有目录的独立模块,我也会很酷。
有谁知道我如何单独配置它?
我也尝试使用在 ubuntu 16.04 中配置的结构,但没有成功。
我安装了 php 的 ppa:ondrej/php 存储库并执行了 apt-get 升级。我几乎不知道它安装了很多我不知道的库包,所以我想知道它们留在系统上是否安全?
php ×10
php-fpm ×4
linux ×3
nginx ×3
apache-2.2 ×1
arch-linux ×1
docker ×1
email ×1
fastcgi ×1
installation ×1
ldap ×1
php.ini ×1
php56 ×1
redhat ×1
repository ×1
sendmail ×1
symfony ×1
ubuntu-12.04 ×1
xdebug ×1