标签: php

如何使用 PHP 会话保护 Apache 中的目录

我有一个使用 PHP 会话进行身份验证的站点。有一个我想限制访问的目录,它不使用任何 PHP,它只是充满了静态内容。

我只是不知道如何在没有每个请求都通过 PHP 脚本的情况下限制访问。有什么方法可以让 Apache 检查会话凭据并限制访问,如基本身份验证?

php authentication apache-2.2

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

如何在 CentOS 上安装 PHP 5.3?

我必须在我的 CentOS 服务器上安装 PHP 5.3。如果我这样做yum install php,基础存储库会安装 5.1.6,这对于我需要安装的应用程序来说太旧了。所以我一直在尝试使用IUS存储库,遵循IUS的官方说明:

root@linuxbox ~]# wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/ius-release-1-2.ius.el5.noarch.rpm

root@linuxbox ~]# wget http://dl.iuscommunity.org/pub/ius/stable/Redhat/5/x86_64/epel-release-1-1.ius.el5.noarch.rpm

root@linuxbox ~]# rpm -Uvh ius-release*.rpm epel-release*.rpm
Run Code Online (Sandbox Code Playgroud)

好的。现在我只是做yum install php53, 等等 我需要的一切......但我收到了这个错误:

Running rpm_check_debug
Running Transaction Test
Finished Transaction Test


Transaction Check Error:
  file /usr/bin/php from install of php53u-cli-5.3.4-3.ius.el5.x86_64 conflicts with file from package php-cli-5.1.6-27.el5_5.3.x86_64
  file /usr/bin/php-cgi from install of php53u-cli-5.3.4-3.ius.el5.x86_64 conflicts with file from package php-cli-5.1.6-27.el5_5.3.x86_64
  file /usr/share/man/man1/php.1.gz from install of php53u-cli-5.3.4-3.ius.el5.x86_64 conflicts with file from …
Run Code Online (Sandbox Code Playgroud)

php centos apache-2.2

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

我为频繁使用的 API 设置的服务器

我很快就会为我即将启动的应用程序购买一堆服务器,但我担心我的设置。我很感激我得到的任何反馈。

我有一个应用程序,它将使用我编写的 API。其他用户/开发人员也将使用此 API。API 服务器将接收请求并将它们中继到工作服务器。该 API 将仅保存用于日志记录、身份验证和速率限制的请求的 mysql 数据库。

每个工作服务器都做不同的工作,并且在未来扩展时,我将添加更多工作服务器来处理工作。API 配置文件将被编辑以记录新的工作服务器。工作服务器将进行一些处理,有些会将图像的路径保存到本地数据库,以便稍后由 API 检索以在我的应用程序上查看,有些将返回处理结果的字符串并将其保存到本地数据库.

你觉得这个设置有效吗?有没有更好的方法来重构它?我应该考虑哪些问题?请看下图,希望能帮助理解。在此处输入图片说明

mysql php web-server infrastructure

9
推荐指数
1
解决办法
363
查看次数

Windows 上 php.ini open_basedir 中的多个路径

我试图在 Windows 服务器上的 php.ini 中为我的 php open_basedir 配置值使用多个路径。

我正在使用的线路是:

open_basedir = E:/Websites;C:/PHP/includes/
Run Code Online (Sandbox Code Playgroud)

不幸的是,它忽略了第二个条目。每当我尝试在 C:/PHP/includes 目录中执行代码时(这个例子恰好是 PHPUnit),我得到

PHP 警告:require():open_basedir 限制生效。文件(C:\PHP\includes\PHPUnit\PHPUnit-3.6.10\PHPUnit\Autoload.php) 不在允许的路径内 : (E:/Websites) in C:\PHP\includes\PHPUnit\PHPUnit -3.6.10\phpunit.php 第 41 行

请注意,它甚至没有显示路径列表中的第二项。谁能发现我哪里出错了?

我认为分号 (;) 表示注释是否正确?如果是这样,我如何分隔条目,因为手册没有说清楚

windows iis php

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

memcache.so 的问题

我被要求启动一个别人建立的网站。这是一个需要 Memcached 才能运行的 Wordpress 商店站点,我一直在让 Memcached 和 memcache php 插件在我的本地服务器上运行时遇到问题。在安装 memcached 和 memcache PHP 插件之前,我会收到这个错误:

Fatal error: Class 'Memcache' not found in [Path]wp-content/object-cache.php on line 350
Run Code Online (Sandbox Code Playgroud)

现在我已经安装了 memcached 和 memcache PHP 插件(通过 Homebrew),我得到一个“没有收到数据”页面,并在我的 Apache 错误日志中得到这个错误:

dyld: lazy symbol binding failed: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

dyld: Symbol not found: _mmc_queue_pop
  Referenced from: /usr/lib/php/extensions/no-debug-non-zts-20090626/memcache.so
  Expected in: flat namespace

[Sat May 05 16:38:27 2012] [notice] child pid 26491 exit signal Trace/BPT trap (5)
Run Code Online (Sandbox Code Playgroud)

我尝试在活动监视器中查找该 pid 无济于事,并且每次尝试加载页面时它都会更改。另外,我在任何地方都找不到关于 …

php mac memcached memcache lion

8
推荐指数
1
解决办法
3570
查看次数

当我看到高 CPU 但内存使用率低时,我应该如何调整 apache?

我的 CentOS 网络节点(LAMP 堆栈)的 CPU 使用率高,但内存使用率低。几乎所有的进程都是apache。我知道我可以添加额外的 web 节点,直到我的 cpu 使用变得合理,但我想这里有一些快速调整技巧可能会有很长的路要走。

CPU 在 90-100% 之间反弹。Mysql 在 5% 到 45% 之间反弹。Apache 弥补了其余部分。

最佳:

top - 21:15:49 up 46 days, 20:39,  4 users,  load average: 34.17, 44.62, 51.03
Tasks: 133 total,  32 running, 101 sleeping,   0 stopped,   0 zombie
Cpu(s): 90.4%us,  9.6%sy,  0.0%ni,  0.0%id,  0.0%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   8388608k total,  6116448k used,  2272160k free,    84160k buffers
Swap: 16777208k total,       68k used, 16777140k free,  3488044k cached

  PID USER      PR  NI  VIRT  RES  SHR …
Run Code Online (Sandbox Code Playgroud)

php performance memory centos apache-2.2

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

我可以在脚本执行之前全局设置 $_SERVER['REDIRECT_URL'] 吗?

我正在将许多站点从旧服务器配置迁移到新服务器配置。每个站点都基于类似(但遗憾的是不完全相同)的代码库,使用 mod_rewrite URL。

  • Ubuntu 8.04 LTS => Ubuntu 12.04 LTS
  • Apache 2.22.8 => Apache 2.2.22
  • PHP 5.2 (FastCGI) => PHP 5.3 (PHP5-FPM)

大多数情况下都像魅力一样工作,但在新配置中 $_SERVER['REDIRECT_URL'] 不再设置,并且代码由于依赖于这个全局变量而失败。

据我了解,当发生重定向时,该变量由 Apache 设置。显然现在这不会发生,但我正在努力寻找原因。

  • 是 Apache 升级,还是(我的猜测)从 PHP FastCGI 切换到 PHP5-FPM?
  • 我如何取回这个变量?

我真的不想在每个站点上编辑代码,所以我会在必要时设置一个全局 PHP auto_prepend,但理想情况下我想修复服务器配置并首先设置它。

可能相关:我现在还有几个新的 $_SERVER 变量,即 REDIRECT_SCRIPT_URL 和 REDIRECT_REDIRECT_SCRIPT_URL。这些似乎具有我想要的 REDIRECT_URL 的正确数据,但似乎也表明发生了两个以前没有的内部重定向 - Google 搜索 REDIRECT_REDIRECT_SCRIPT_URL 仅返回随机 var_dump 输出。SCRIPT_URL 是新的 REDIRECT_URL 吗?

编辑 1

再次检查 REDIRECT_URL 已(现在)设置,但始终设置为“index.php”(mod_rewrite 目标)而不是预期的键入 URL。我已经使用 PHP auto_prepend_file 来手动设置所需的变量。

我不确定我是如何在第一轮错过它的,但在此期间我做了一些更改,所以我认为它不存在的外部机会。如果这误导了任何人,我们深表歉意。

编辑 2

为了解决下面提到的 ErrorDocument,使用的 mod_rewrite 规则是:

RewriteRule ^(.*)$ /index.php?url=$1 [QSA,L]
Run Code Online (Sandbox Code Playgroud)

$_GET['url'] 变量已设置,因此规则必须有效。 …

php php-fpm apache-2.2

8
推荐指数
1
解决办法
4175
查看次数

Apc、xcache 还是 eAccelerator?我应该为 Wordpress 使用什么?

我正在尝试为 Wordpress 站点配置服务器。我应该使用什么来缓存操作码?APC、xcache 还是 eAccelerator?

php xcache alternative-php-cache

8
推荐指数
1
解决办法
6430
查看次数

Apache + PHP-FPM = 随机“错误解析脚本头”+ 段错误

我使用 proxy_fcgi 在 Apache 2.4 上设置了 PHP-FPM,一切正常,但是 4-6 个请求中的每个请求,Apache 都会返回一个空白页面。这发生在我的主站点http://danielhe.com/ 上,但不是子域 vhosts。

这会显示 Apache 的错误日志,[client x] AH01070: Error parsing script headers

最终,有时 Apache segfaults AH00052: child pid 9740 exit signal Segmentation fault (11)

通过多次刷新页面,我可以很容易地重现“错误解析脚本标题”,但是在几次“错误解析脚本标题”之后,段错误会随机发生

更新 我找到了段错误的修复程序,并且 WSOD 显然已自行修复。mod_deflate 有一些问题,但是 Apache 文档中的这个配置修复了它

SetOutputFilter DEFLATE
BrowserMatch ^Mozilla/4 gzip-only-text/html
BrowserMatch ^Mozilla/4\.0[678] no-gzip
BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
# Don't compress images
SetEnvIfNoCase Request_URI \
\.(?:gif|jpeg|jpg|png)$ no-gzip dont-vary
# Make sure proxies don't deliver the wrong content
Header append Vary User-Agent env=!dont-vary
Run Code Online (Sandbox Code Playgroud)

php httpd php-fpm apache-2.4

8
推荐指数
1
解决办法
8993
查看次数

Nginx 忽略客户端的 HTTP 1.0 请求并通过 HTTP 1.1 响应

我正在测试使用nginx/php5-fpm, 与代码

<?php

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
// also tested: header("Status: 404 Not Found");

echo $_SERVER["SERVER_PROTOCOL"];
Run Code Online (Sandbox Code Playgroud)

并强制在命令中使用HTTP 1.0curl。

curl -0 -v 'http://www.example.com/test.php'


> GET /test.php HTTP/1.0

< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Sat, 27 Oct 2012 08:51:27 GMT
< Content-Type: text/html
< Connection: close
< 
* Closing connection #0
HTTP/1.0
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,我已经在请求使用HTTP 1.0,但是 nginx 回复我HTTP 1.1

赏金

@MaximDounin,@MichaelHampton 已经为规范提供了答案,谢谢。我正在为未来的读者扩展这个问题:

问:当客户端请求 HTTP 1.0 时,响应 HTTP 1.1 的优势是什么?谷歌采取的方法不应该更合理,即当客户端请求 1.0 时,用 1.0 …

php http nginx php-fpm

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