Articles of PHP

在fcgi看到请求之前使mod_rewrite规则进行处理

有没有办法让我的.htaccess文件中的mod_rewrite规则在fcgi后面的PHP看到请求之前生效? 我有一个电子邮件validation链接,我想从根目录redirect到login页面,然后PHP在数据库中将其标记为已确认。 这些是我在.htaccess中的规则,它们工作,但PHP在重写规则生效之前看到请求。 <IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{QUERY_STRING} activation_key= RewriteRule ^$ /login [R,L] RewriteBase / RewriteRule ^index\.php$ – [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> 当PHP看到包含activation_key查询string的请求时,会将用户标记为已激活。 如果用户已经激活,页面将显示“未知的validation链接”错误。 使用这些重写规则,请求会redirect到/login页面并显示错误,表明 – 我认为 – PHP已经看到了请求。 这是mod_fastcgiconfiguration: <IfModule mod_fastcgi.c> DirectoryIndex index.html index.shtml index.cgi index.php AddHandler php5-fcgi .php Action php5-fcgi /php5-fcgi Alias /php5-fcgi /usr/lib/cgi-bin/php5-fcgi […]

需要删除创build的头中不需要的前缀

我试图生成特定的头来模仿一个服务提供者。 但是,我不断得到HTTP_前缀添加到我的标题。 configuration文件: <IfModule headers_module> RequestHeader set ntPrincipal "abcdef" </IfModule> 输出在PHP中, [HTTP_NTPRINCIPAL] => abcdef 所需的标题将需要是: [NTPRINCIPAL] => abcdef 我已经尝试了以下不起作用(我根本看不到标题): <IfModule headers_module> Header set ntPrincipal "abcdef" </IfModule> 更新#1 我试图模仿的服务提供商/环境是使用Shibboleth SP的Apache。 更新#2 这个本地副本运行在Windows 7上的WAMP。我只是做了以下,他们似乎正常显示: var_dump(getallheaders()); 输出: 'ntPrincipal' => string 'abcdef' (length=6) 提示在这里find 。 要做到这一点,对我们来说将是反作用的。 我的开发/testing/生产环境工作正常,Shibboleth正确地提供这些头文件,我看不到我怎么不能在我的configuration文件中指定它们,让它们看起来像是由Shibboleth服务的。

自动生成php.ini

在我的phpinfo中我看到这个: Configuration File (php.ini) Path /etc Loaded Configuration File /var/www/vhosts/example.com/etc/php.ini Scan this dir for additional .ini files /etc/php.d 当我打开/var/www/vhosts/example.com/etc/php.ini文件时,我看到了这个通知: ; 注意! ; ; 不要修改这个文件,因为它是自动生成的, ; 因此,所有的变化将会丢失,下一次文件被生成。 当我改变这个文件,并使service httpd restart ,我看到phpinfo改变。 但是,我能做些什么来永久改变? 当我更改/etc/php.ini文件并重新启动httpd时,我发现值没有改变。 好像php.ini文件不是在httpd重新启动时自动生成的。 什么触发自动生成? 系统:Centos 6.3,Plesk 11,PHP 5.4.17

在Amazon Instance上创build虚拟目录

好吧,所以我有一个AMI,我用于一个豆茎的应用程序。 我开始使用它提供的通用amazon实例,然后在其上挂载一个EBS卷。 然后我上传了我的webapp。 接下来我想要做的是通过networking访问站点/文件上的某种虚拟目录,并指向安装位置/mnt/Files 。 我试过了 sudo ln -s /mnt/Files /home/webapp/files 但是这没有用。 我没有访问webapp文件夹,所以我不能真正挖掘。 所以我的问题是两方面的。 1)有没有办法像这样configuration虚拟目录,而不需要修改虚拟机本身。 2)如果没有办法这样做,我将如何去做一个虚拟目录? 我甚至不确定webapp包含服务器文件等

Nginx不能回应

我已经在Windows Server 2012上设置了WNMP,尽pipe事实上它并不是那么需要的设置,以下是我的设置: worker_processes 1; error_log logs/error.log; #pid logs/nginx.pid; events { worker_connections 1024; } http { fastcgi_read_timeout 2m; fastcgi_ignore_client_abort on; include mime.types; default_type application/octet-stream; access_log off; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; ssl_session_timeout 10m; ssl_protocols TLSv1.2 TLSv1.1 TLSv1 SSLv3; ssl_ciphers ECDHE-RSA-AES128-SHA256:AES128-GCM-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH; ssl_prefer_server_ciphers on; #gzip on; # http server server { listen 80; listen […]

通过PDO连接到SQL Server 2005

我使用微软的Web Platform Installer 4.6将我的PHP安装升级到了5.4.14。 Php工作得很好,除非我无法连接到我的数据库。 升级之前,我的连接工作很好,但现在不能工作。 这是我的连接string,其中1.1.1.1是我的真实IP地址: $db = new PDO("odbc:DRIVER={SQL Server};SERVER=1.1.1.1;DATABASE=TEST;charset=utf8", "TEST", "Password"); 这会导致浏览器popup一个页面,显示“服务器错误”,但我的错误日志保持为空。 在我的php.ini文件中,我有这些行: extension=php_pdo_sqlsrv.dll extension=php_sqlsrv.dll extension=php_sqlsrv_53_nts_vc6.dll 这些扩展名不会显示在我的phpinfo.php页面上。 我的“extension_dir”variables被设置为正确的目录。 更新:现在我的错误日志正在填充(原因未知),我得到这个错误: PHP Warning: PHP Startup: Unable to load dynamic library 'C:\Program Files\PHP\v5.4\ext\php_pdo_sqlsrv.dll' – The specified module could not be found.

问题与RackTables浏览器安装

我目前正在开发一个安装RackTables应用程序的项目。 我开始在Linux Ubuntu 12.04 LTS上构build一个LAMP服务器。 我遵循RackTables Wiki的指示。 当进入浏览器安装的地方,inputhttp://ip.address/racktables时 ,Web服务器将显示目录path和文件夹,而不是安装1到6的RackTables步骤。 任何想法,我错过了什么? 您的反应和援助将不胜感激。

文件名是透明地redirect到file-name.php

如果我请求/文件名我得到/file-name.php的内容回来。 我想知道这是如何发生,但似乎无法弄清楚。 我清空了.htaccess,它仍然在做。 我证实,我清空的.htaccess是正确的,在其中放置“zzz”,导致内部服务器错误,如我所料。 我在/ etc / apache2 / sites-enabled的httpd.conf文件中找不到任何东西。 有任何想法吗?

fastCGI PHP如何通过auditd更改文件并逃脱检测?

有一天,我在Debian服务器上设置了一个小脚本,在文件发生变化时向我发送电子邮件。 它看起来像这样: #!/bin/sh items=`find /var/www/vhosts -regex ".*/httpdocs/.*" -newer files_start -ls` if [ ! -z "$items" ] then touch files_start echo "$items" | mail -s "new file(s)" "[email protected]" fi 我不断得到一个神秘的长度为0的文本文件(可以通过PHP和vhost用户,而不是Apache)进行修改,每天修改2-3次,所以我使用以下规则设置了auditd。 auditctl -l LIST_RULES: exit,always watch=/var/www/vhosts/path/to/file.txt perm=rwa key=wh1 正如预期的那样,我testing了它, …comm="touch" exe="/bin/touch"… 在得到下一个电子邮件与新的MODdate后,我跑ausearch:没有新的比赛! 这怎么可能发生? —- —-更新 我通过其他方式发现,这个过程是PHP运行的,就像Apache调用的fastCGI一样。 PHP函数调用是: touch('path/to/file.txt'); 所以问题就变成了:fastCGI PHP如何通过auditd改变文件并逃脱检测? 这开始看起来像一个审计错误。

在弹性Bean中维护会话

随着EBS亚马逊的实例数量的不断变化。 如果一个应用程序是用PHP构build的,会话将在几个实例之间被修补? 我们如何确保不要删除父实例(当应用程序启动时的第一个实例)