Articles of PHP

使用Puppet + Vagrant为PHP安装Mongo驱动程序

我正在玩Vagrant和Puppet,为基于Apache / PHP / Mongo的项目提供开发机器。 我已经正确地设置了所有的组件(使用Puppet Forge的模块),但是对于我来说,我无法弄清楚如何使PHP与Mongo交谈。 phpinfo()表明,Mongo驱动程序没有安装 – 这只是有道理的,因为我不知道如何去安装它。 我用来安装PHP的puppet模块是Lab42的一个,可在http://github.com/lermit/puppet-php上find 。 自述演示如何切换模块而不是驱动程序 (afaik,Mongo连接通过驱动程序而不是模块build立)。 任何帮助,提示,或实际完成这个.pp文件的链接将是最受欢迎的。 谢谢! 更新: 想出了这个神奇的线: php::pecl::module { "mongo": } 基本上通过PECL添加Mongo支持。 但是当木偶试图运行它,我得到这个: err: /Stage[main]/Project/Php::Pecl::Module[mongo]/Package[php-mongo]/ensure: change from purged to present failed: Execution of '/usr/bin/apt-get -q -y -o DPkg::Options::=–force-confold install php5-mongo' returned 100: Reading package lists… Building dependency tree… Reading state information… E: Couldn't find […]

已经改变了文件的内容,但是在networking浏览器中新的内容仅在几分钟后才出现。 在哪里设置caching时间CentOS的PHP?

使用WinSCP和Notepad ++更改了php文件的内容。 保存。 然后在Web浏览器中打开更改的文件。 但看到以前的内容。 更改的(新)内容仅在〜3分钟后才会显示。 这里https://stackoverflow.com/a/1581067/2465936find相关的问题。 并回答它与caching时间有关。 那么理解需要更改caching时间? 在哪里改变? 假设在php.ini? 要改变什么? 试图减lesssession.cache_expire = 180但没有解决scheme。 可能是因为光油http://www.servermom.com/install-varnish-3-to-run-with-apache-2-on-centos-server/552/ ? 可能是要尝试卸载?

环境variables的操作顺序

我想了解如何设置和重置(重写)环境variables。 我在Mac上运行Apache / 2.2.24(Unix)PHP / 5.4.14。 我的理论是这样的: 环境variables可以在bash中设置,然后可以用php.ini之前的一个VirtualHost指令之前的httpd.conf覆盖,然后可以用.htaccess(如果允许)覆盖,最后用PHP 我尝试了以下内容: 在bash中设置环境variables:我将export ENVIRONMENT='local'到我的〜/ .bashrc文件中,重新启动apache,并且没有从print_r($_ENV);得到任何输出print_r($_ENV); (在我的web服务器根目录下的一个简单的index.php文件中)。 我也尝试把ENVIRONMENT='local'放到/ etc / environment中 ,然后重新启动apache,没有任何东西,还有/ etc / bashrc ,重新启动apache。 依然没有。 在httpd.conf中设置环境variables:我将SetEnv ENVIRONMENT 'local-httpd到我的/etc/apache2/httpd.conf文件的末尾(但在加载其他conf文件之前,比如虚拟主机[ Include /private/etc/apache2/other/*.conf ])。 我现在看到数组print_r($_SERVER);的variablesprint_r($_SERVER); 但不是print_r($_ENV); 。 在httpd-vhosts.conf中设置环境variables:我在我的通用指令中添加了SetEnv SetEnv ENVIRONMENT 'local-vhost到我的/etc/apache2/extra/httpd-vhosts.conf文件,该指令指向了我的默认文档根目录。 我现在看到variables已被覆盖(local-vhost从local-httpd,所以我知道variables正在设置)。 在php.ini中设置环境variables:当search一个合适的位置来放置我的环境variables时,我注意到variables_order = "GPCS"被设置为生产值而不是EGPCS 。 我改变了它,重新启动我的服务器,发现我现在得到了print_r($_ENV);输出print_r($_ENV); 但不是我预期的自定义variables。 它也似乎我无法在此文件中设置自定义variables。 请告诉我,如果我错了 在.htaccess中设置环境variables:我添加了SetEnv ENVIRONMENT 'local-htaccess' 。 这按预期工作,覆盖设置的所有其他值。 在PHP中设置/覆盖环境variables: 如果(…){ 运行putenv( '环境=本地'); } […]

如何卸载`yum list`或`rpm -qa`中找不到的`php`?

我有一个stream氓PHP安装在我的服务器上的某个地方,我想删除和坚持纯粹的百胜安装。 我如何find并卸载这个stream氓PHP安装? yum和rpmsearch都是空的。 $ yum list installed | grep -i php $ rpm -qa | grep -i php $ php -v -bash: /usr/bin/php: No such file or directory 然而浏览器可以返回一个简单的<?php phpinfo(); ?> <?php phpinfo(); ?>页面。

AWS EC2 PHP session_start权限被拒绝

我有一个与PHP有关的会话保存path的奇怪问题。 我在我的php.ini中configuration了session.save_path =“/ tmp”,并且我知道这是正确configuration的,因为在服务器中我可以input以下命令并且命令结果似乎很好。 $ php -i | grep session.save_path session.save_path => /tmp => /tmp 但是,当我试图从PHP代码开始一个会话,我收到以下错误: Warning: session_start(): open(/var/lib/php/session/sess_7ktfe84jqca3ga6ftk6fsrurv6, O_RDWR) failed: Permission denied (13) 所以这里的path与php.ini中configuration的/ tmp完全不同。 这种行为有什么理由吗? 我已经检查了在我的代码中没有任何调用session_save_path来更改默认的保存path。 出现此问题的服务器是AWS EC2实例。

是否有可能在同一台机器上有两个不同的PHP和Apache安装?

我公司有一个动机,使我们的开发服务器上的一个编码器团队开发现有产品的升级版本。 有两种configuration,一种是我们现在使用的configuration,另一种是首选安装在干净的PHP / Apache安装(但如果可能的话在同一台服务器上)的configuration。 我的问题是,是否有可能在同一台服务器上有两组不同的php.ini和httpd.conf ? 一个会指向目前的产品,另一个会指向升级/更新的产品..

从命令行执行的php -i和从浏览器执行的phpinfo显示不同的php参数

我的问题是,当我执行php -i它显示PHP版本为PHP 5.4和加载的configuration文件为/usr/local/lib/php.ini 。 当我从命令行执行脚本phpinfo.php ,它显示php 5.3和加载的configuration文件为/etc/php.ini 。 我如何启用默认的PHP解释器为PHP 5.3? 我需要5.3,因为php 5.3configuration了PDO和pdo_mysql ,其中php 5.4没有configuration它也是php 5.3的zend版本是220090626,而php 5.4是220090525。 当我尝试从浏览器执行PHP脚本时,它正在使用PHP 5.4(它没有PDO扩展名)进行编译,并将未定义的PDO引发一个致命错误。 我如何configuration我的Apache为脚本加载php 5.3。 phpinfo.php脚本如下 <?php phpinfo(); ?>

在Ubuntu 12.04 LTS上保护PHP?

我最近build立了一个Ubuntu 12.04服务器(Apache 2.2和PHP 5.3.10)。 当我testing它的时候,我注意到在Apache访问日志中,一个未知的IP地址正在尝试执行PHP CGI注入攻击,利用这里描述的已知缺陷: http://www.osvdb.org/81633 幸运的是,我碰巧注意到这一点,我阻止了入侵者进入服务器,但注入攻击成功地改变了我的一些php.ini设置。 根据漏洞描述,唯一免疫注入的PHP版本是5.3.13和5.4.3+。 我试图通过使用这个(显然是stream行的)非官方的仓库升级到5.5: add-apt-repository ppa:ondrej/php5 它升级了我的PHP,但它也摧毁了我的Apache设置,并将Apache升级到了2.4,这是我无法使用的。 所以我不得不回滚系统。 然后,我尝试使用apt-get升级到PHP 5.3.13,但显然5.3.10是官方Ubuntu 12.04回购版中的最高版本。 有点令人沮丧,至less可以说。 所以我的问题是:我怎样才能保护PHP 3.5.10或在Ubuntu 12.04上安装PHP的“安全”版本,这样我就可以防止这种攻击再次发生? 我绝对不想要Apache 2.4,我需要一个LTS服务器。

NginX导致PHP文件被执行两次

我处于一个困难的地方,试图弄明白为什么会这样。 出于某种原因,当我打开我的网站的index.php文件正在执行。 我已经能够通过添加file_put_contents('runs.txt', 'executed'.PHP_EOL, FILE_APPEND);将其缩小到NginX / PHP-FPM file_put_contents('runs.txt', 'executed'.PHP_EOL, FILE_APPEND); 到index.php的顶部,并使用网站和命令行执行它。 如果我从命令行执行它,它只输出一个executed ,而如果我从网站(通过NginX) executed它输出两个executed 。 该脚本也没有redirect到自身,因为它只是返回200响应代码。 除了通过执行脚本两次使用更多的内存之外,还通过使CSRF再次生成来消除CSRF保护,因此CSRF是无用的。 下面是我的nginxconfiguration文件: nginx.conf user nginx; worker_processes 2; error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr – $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log […]

Nginx的。 使用正则expression式redirect

我是nginx的新手。 我有Apache之前的nginx,我有问题。 我似乎需要在configuration2规则: 规则1)如果我们有url“/ my_path”我们不碰它,但用户去“/ my_path.php” 规则2)如果我们有url“/my_path.php”,我们将它改为“/ my_path”,用户转到“/my_path.php”,因为我们回到规则1。 我认为这是必要的search引擎优化? 我的configuration,例如是… server { listen 8080; server_name my_apache_server; location / { proxy_pass http://my_apache_server/; } location ~^\/(.+)$ { rewrite ^\/(.+)$ /$1.php break; proxy_pass http://my_apache_server/; } location ~^\/(.+)\.php$ { proxy_redirect http://my_apache_server/$1 http://my_apache_server/error.php; } … } 但是nginx显示一个错误: nginx: [emerg] "proxy_pass" cannot have URI part in location given by regular expression, […]