标签: php

Nginx/PHP-FPM 长日志行被截断

我不确定这是 Nginx 或 PHP-FPM 设置,但长日志行被截断。是否有增加最大日志行长度的设置?

php nginx fastcgi php-fpm fcgi

11
推荐指数
3
解决办法
9820
查看次数

使用控制台参数设置 php error_reporting 值

为了测试我的 PHP 项目的错误,我通常使用以下命令:

find ./ -type f -name \*.php -exec php -l '{}' \; | grep -v "No syntax errors detected"
Run Code Online (Sandbox Code Playgroud)

我想php -l '{}' \;用一些参数扩展该部分,以便它使用自定义的 error_reporting 级别,而不是在 php.ini 中定义的级别。这可能吗?

(我知道这个问题与编码有关。另一方面,它更多地与 shell 命令有关。如果您认为它在 stackoverflow 上应该更好,那么请随意移动它。我不确定该问题更适合哪里。)

php command-line-interface console

11
推荐指数
1
解决办法
1万
查看次数

.htaccess RewriteCond for REMOTE_ADDR 而在负载均衡器后面?

我在负载平衡器后面有一个 Web 服务器。

我需要向我的 .htaccess 添加条件重定向,以便在我们将站点脱机进行维护时显示维护页面。这部分很简单:

RewriteEngine on
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]
Run Code Online (Sandbox Code Playgroud)

但是我想添加一个条件,如果访问者的 IP 地址是我自己的,它不会将我重定向到维护页面,并且我将能够像在线一样查看和测试该站点。这部分通常也很简单:

RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^11\.111\.111\.111
RewriteCond %{REQUEST_URI} !/maintenance.php$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.php [R=302,L]
Run Code Online (Sandbox Code Playgroud)

但是,因为我的 Web 服务器在负载均衡器后面,所以REMOTE_ADDR被解析为负载均衡服务器的内部 IP 地址。

如何更改它以查找转发的 IP 地址?我知道在 PHP 中你可以$_SERVER['HTTP_X_FORWARDED_FOR']用来获取转发的 IP 地址。我已经尝试了一些东西,.htaccess但没有运气:

%{X_FORWARDED_FOR}
%{HTTP:X_FORWARDED_FOR}
%{HTTP_X_FORWARDED_FOR}
Run Code Online (Sandbox Code Playgroud)

解决方案

我得到了以下工作:

%{HTTP:X-FORWARDED-FOR}
Run Code Online (Sandbox Code Playgroud)

linux php lamp .htaccess apache-2.2

11
推荐指数
2
解决办法
2万
查看次数

如何在 CentOS 5.7 64 位上为 PHP 5.3.3 安装 mcrypt?

我安装了 php 5.3 和一些使用的模块

yum install php53-{module-name}
Run Code Online (Sandbox Code Playgroud)

但是 mcrypt 没有用。

我是这样搜索的:

yum list php* | grep mcry
Run Code Online (Sandbox Code Playgroud)

唯一出现的包是

php-mcrypt.x86-64         5.1.6-15.e15.centos.1    extras
Run Code Online (Sandbox Code Playgroud)

我对 mhash 有同样的问题。php 的结果更令人困惑。

我知道这可能是一个愚蠢的问题,但任何帮助将不胜感激。我习惯了 Ubuntu 的简单“apt-get install”,一切正常。CentOS 似乎更加注重细节。

谢谢。

编辑:这是我尝试过的:

yum install php53-mcrypt
Run Code Online (Sandbox Code Playgroud)

结果:

No package php53-mcrypt available
Run Code Online (Sandbox Code Playgroud)

并尝试这个:

yum install php-mcrypt
Run Code Online (Sandbox Code Playgroud)

结果是:

Error: php53-common conflicts with php-common
Run Code Online (Sandbox Code Playgroud)

因为 php-mcrypt 试图将 php-common 作为依赖项(?),而我正在尝试使用 php 5.3 而不是 CentOS 5.7 上的默认 php 5.1。

package-management php centos rpm mcrypt

11
推荐指数
2
解决办法
6万
查看次数

无法登录到 phpPgAdmin

我正在尝试在我的测试机器上设置 phpPgAdmin,以便我可以与 PostgreSQL 交互,而不必总是使用psqlCLI。我通过 RPM 存储库安装了 PostgreSQL 9.1,而我“手动”安装了 phpPgAdmin 5.0.4(通过从 phpPgAdmin 网站提取存档)。作为记录,我的主机操作系统是 CentOS 6.2。

我已经进行了以下配置更改:

PostgreSQL

  • 在里面pg_hba.conf,我把所有的METHODs都改成了md5。
  • 我给了 postgres 帐户一个密码
  • 我添加了一个名为 webuser 的新帐户和密码(请注意,我没有对该帐户执行任何其他操作,因此我不能确切地说我知道它具有什么权限以及所有权限)

phpPgAdmin config.inc.php

  • 将该行更改$conf['servers'][0]['host'] = '';$conf['servers'][0]['host'] = '127.0.0.1';(我也尝试使用 localhost 作为那里的值)。
  • 设置$conf['extra_login_security']false

每当我尝试登录 phpPgAdmin 时,我都会收到“登录失败”,即使我使用了成功的凭据(在psql. 我已尝试完成常见问题解答中问题 3 中提到的一些步骤,但到目前为止效果不佳。这是我使用 PostgreSQL 的第一天,这可能无济于事。我对 MySQL 非常熟悉,但我必须将 PostgreSQL 用于我正在处理的项目。

谁能提供一些有关如何在 CentOS 6.2 上设置 phpPgAdmin 的帮助?如果到目前为止我在我的配置中做了一些非常错误的事情,那么把某些东西/一切都吹走也没什么大不了的,因为我还没有在那里存储任何数据!

我感谢您的任何见解!

postgresql php database-administration centos6.2

11
推荐指数
1
解决办法
3万
查看次数

为什么 Cacti 一直在等待死的轮询进程?

我目前正在设置一个新的 Debian (6.0.5) 服务器。我昨天在上面放了仙人掌(0.8.7g),从那以后就一直在与它作斗争。

创刊号

我观察到的最初问题是我的图表没有更新。所以我检查了我的cacti.log并发现了这个关于消息:

POLLER: Poller[0] Maximum runtime of 298 seconds exceeded. Exiting.
Run Code Online (Sandbox Code Playgroud)

那不可能是好事,对吧?所以我去检查并开始poller.php自己(通过sudo -u www-data php poller.php --force)。它会输出大量消息(看起来都像我期望的那样)然后挂起一分钟。1 分钟后,它将循环显示以下消息:

Waiting on 1 of 1 pollers.
Run Code Online (Sandbox Code Playgroud)

这将持续 4 分钟,直到该过程因运行时间超过 298 秒而被强制结束。

到现在为止还挺好

我花了一个小时试图确定可能仍在运行的 poller ,直到我得出结论,根本没有正在运行的 poller

调试

我检查poller.php了该警告的发出方式以及原因。在第 368 行,Cacti 将从数据库中检索已完成进程的数量,并使用该值来计算有多少进程仍在运行。所以,让我们看看这个价值!

我将以下调试代码添加到poller.php

$finished_processes = db_fetch_cell("SELECT count(*) FROM cacti.poller_time WHERE poller_id=0 AND end_time>'0000-00-00 00:00:00'");
print "Finished: " . $finished_processes . " - Started: " . $started_processes . …
Run Code Online (Sandbox Code Playgroud)

php cacti debian-squeeze

11
推荐指数
1
解决办法
1万
查看次数

如何将自定义参数从 Nginx 传递给 PHP?

我正在与passNginx 1.2.4结合使用并尝试将自定义参数传递给. 以下是我目前找到的选项:PHP-FPM 5.4.8fastcgiPHP

  • 使用env指令设置环境变量 innginx并使用getenv()$_ENVfrom获取它PHP。问题是env只在main上下文中操作,而我需要在上下文中设置参数server

  • 使用fastcgi_param专为此设计的指令。

我曾尝试使用更改某些参数的值fastcgi_param但未成功:

nginx:

fastcgi_param PATH_INFO "/var/tmp";
Run Code Online (Sandbox Code Playgroud)

PHP:

我检查了我能找到的所有预定义数组:

echo '<pre>';
echo "\n".'$GLOBALS'."\n"; var_dump($GLOBALS);
echo "\n".'$_SERVER'."\n"; var_dump($_SERVER);
echo "\n".'$_GET'."\n"; var_dump($_GET);
echo "\n".'$_POST'."\n"; var_dump($_POST);
echo "\n".'$_FILES'."\n"; var_dump($_FILES);
echo "\n".'$_REQUEST'."\n"; var_dump($_REQUEST);
echo "\n".'$_SESSION'."\n"; var_dump($_SESSION);
echo "\n".'$_ENV'."\n"; var_dump($_ENV);
echo "\n".'$_COOKIE'."\n"; var_dump($_COOKIE);
echo "\n".'$php_errormsg'."\n"; var_dump($php_errormsg);
echo "\n".'$HTTP_RAW_POST_DATA'."\n"; var_dump($HTTP_RAW_POST_DATA);
echo "\n".'$http_response_header'."\n"; var_dump($http_response_header); …
Run Code Online (Sandbox Code Playgroud)

php nginx fastcgi php-fpm

11
推荐指数
1
解决办法
3万
查看次数

将 Apache 虚拟主机与系统的其余部分隔离

我正在设置一个 Web 服务器,它将托管许多不同的网站作为 Apache VirtualHosts,每个网站都可以运行脚本(主要是 PHP,可能还有其他)。

我的问题是如何将这些 VirtualHosts 与彼此以及系统的其余部分隔离开来?我不希望网站 X 读取网站 Y 的配置或任何服务器的“私有”文件。

目前,我已经按照此处所述(http://x10hosting.com/forums/vps-tutorials/148894-debian-apache-2-2-fastcgi-php-5-suexec)设置了带有 FastCGI、PHP 和 SUExec 的 VirtualHosts -easy-way.html ),但 SUExec 仅阻止用户编辑/执行除他们自己之外的文件 - 用户仍然可以读取敏感信息,例如配置文件。

我曾考虑删除服务器上所有文件的 UNIX 全局读取权限,因为这将解决上述问题,但我不确定是否可以安全地执行此操作而不会中断服务器功能。

我也研究过使用 chroot,但似乎这只能在每个服务器的基础上完成,而不能在每个虚拟主机的基础上完成。

我正在寻找任何将我的 VirtualHosts 与系统其余部分隔离的建议。

PS 我正在运行 Ubuntu 12.04 服务器

我的回答:我几乎按照我当前的配置结束,但是为所有虚拟主机做一个 chroot jail,例如在 chroot jail/var/www,然后将所有用户的数据放在子文件夹中,每个子文件夹都具有 group/others r/w/x 权限禁用。此选项是可取的,特别是因为无需对源代码进行任何修改即可实现。

我选择了@Chris 的答案,因为它写得很透彻,而且还考虑了 FTP 和 SELinux

security ubuntu php shared-hosting apache-2.2

11
推荐指数
3
解决办法
2万
查看次数

如何设置 postfix 将电子邮件存储在文件中而不是转发它?

我想在本地环境中运行生产服务器的临时副本。该系统运行一个 PHP 应用程序,该应用程序在各种情况下向客户发送电子邮件,我想确保永远不会从临时环境发送电子邮件。

我可以调整代码,使其使用虚拟电子邮件发件人,但我想运行与生产环境完全相同的代码。我可以使用不同的 MTA(Postfix 正是我们在生产中使用的),但我想要在 Debian/Ubuntu 下易于设置的东西:)

因此,我想设置本地 Postfix 安装以将所有电子邮件存储在(一个或多个)文件中,而不是中继它。实际上,我并不真正关心它是如何存储的,只要可以检查发送的电子邮件即可。即使是告诉 postfix 将电子邮件保留在邮件队列中的设置选项也可以工作(当我使用生产副本重新加载临时服务器时,我可以清除队列)。

我知道这是可能的,我只是没有在网上找到任何好的解决方案来满足似乎相当普遍的需求。

谢谢!

php email-server postfix

11
推荐指数
1
解决办法
1万
查看次数

php.ini 更改没有任何效果

当我在 centos 上的 /usr/local/lib 中的 php.ini 中进行任何更改时,这些更改似乎没有应用,例如,当我清除 php.ini 的所有内容并重新启动 Apache 时,一切正常。 ..

我搜索了 php.ini,它在系统中的一个地方...有什么问题?我怎样才能解决这个问题?

php php.ini apache-2.2

11
推荐指数
2
解决办法
4万
查看次数