Articles of PHP

PHP应用程序的环境variables

一个PHP应用程序需要我设置几个环境variables,如数据库凭证,SMTP服务器等。 variables的例子包括: FOO_DATABASE_URL=mysql://user:pass@host:3306/dbname FOO_SMTP_SERVER=smtp://user:pass@host:25 FOO_FILE_PATH=/var/www/foo FOO_URL_HOST=example.org FOO_URL_PATH=/foo 哪里可以设置这些variables? 最初我尝试在~/.profile设置它们,但是我意识到我并不是Apache运行的用户,所以这是行不通的。 我find了/etc/environment但我不确定这是否适合设置它们。 目前这里只有PATH 。 如果我只在这里设置,我需要在输出前面添加行吗? 该文档指出ENV文件应该在生产中避免,以最大限度地提高性能。 如果可能的话,我也想避免使用Apache的PassEnv和PassEnv指令。 我的生产服务器是CentOS,但是我想知道如何在Linux Mint和Ubuntu上做到这一点,即使我目前使用ENV文件进行开发。

我如何获得LDAP将当前login的用户凭据传递给本地Apache服务器?

我试图获得SSO(单点login)在本地osTicket安装工作。 我在osTicket网站上find了HTTP passthru插件,并将其安装在osTicket中。 我已经确定插件正在确保我可以访问插件设置。 因此,据我所知,应该发生的事情是,用户的凭据是从Windows读取的,然后直接传递到osTicket,以便用户自动login。如果我错了关于插件应该如何工作,请纠正我。 我还确保LDAP插件正在运行并安装在osTicket中。 我做了一些关于为什么自动login不起作用的研究,并且认识到HTTPauthentication与Windows ADauthentication不一样。 我查了一下SSPI,Kerberos等等,看看是否可以获得Apache的Apache服务器的Windows凭据,并假定LDAP模块应该能够获得这些凭证。 再次,如果我对LDAP模块的工作方式有误,请纠正我。 最后,我刚刚干掉了我的XAMPP安装,并开始了一个WAMP安装。 得到了LDAP的工作,现在我试图find一种方法来获得Apache的凭据。 我写了一个简单的脚本,应该回显当前login的用户。 <?php $user = $_SERVER['REMOTE_USER']; ?> <html> <body> <?php echo $user;?> </body> </html> 但是,当我运行这个脚本,我得到以下错误。 (!)注意:未定义的索引:第2行的C:\ wamp \ www \ servertest.php中的REMOTE_USER 这告诉我,$ _SERVER的超全球不获取当前连接的用户的Windows凭据。 我如何填写这个超级全球数组与Windows凭据? 有什么configuration选项需要添加到我的HTTPD.conf?

SoapClient PHP 5.6在IIS 7(FastCgi)中运行缓慢,可以从CLI中调用

我有一个PHP脚本,连接到一个Web服务。 当通过CLI运行相同的脚本时,它运行正常(初始连接一秒钟,并非常快地调用服务)。 当通过IIS FastCGI服务器在PHP中运行页面时,首次调用web服务方法需要大约5秒钟的时间。 第二次调用webservice方法是正常的。 任何有关下一步检查的build议将不胜感激。 我不知道如何进一步debugging。 我在Windows Server 2008 R2 Standard的IIS上使用PHP 5.6.13 这是我用来孤立地testing这个问题的脚本(Web服务名称匿名,因为它不公开访问) <?php define('SOAP_URL', 'https://sandbox.webservice.com/Service.asmx?WSDL'); define('SOAP_NAMESPACE', 'http://service.webservice.com/'); class WebService { public $client; function __construct($SoapURL = SOAP_URL, $SoapNS = SOAP_NAMESPACE) { $soapHeader = array('User' => '…', 'SecretKey'=> '…'); $this->client = new SoapClient($SoapURL, ['trace'=>true]); $header = new SOAPHeader($SoapNS, 'ClientAuth', $soapHeader); $this->client->__setSoapHeaders($header); } } var_dump(['start', $time […]

如何禁用一个Apache虚拟主机上的PHP邮件function?

我想通过Apache2虚拟主机configuration文件禁用PHP函数邮件。 我想要做一个虚拟主机,而不是所有的虚拟主机,我不想在php.ini中禁用此function 如何正确地做到这一点? 提前致谢!

长时间运行的PHP进程随机停止并显示“Killed”

我有一个PHP脚本,我写了,我正在运行,它已经跑了一路,但由于某种原因,它不断停下来的消息“杀”… 这是我的盒子,没有其他人login 脚本在任何地方都没有“Killed”这个词 什么是杀我的脚本,为什么?

使用docker容器作为其他容器的文件系统

这个问题似乎在表面“卷”上有一个简单的答案,但我相信这可能会更复杂一点。 说明 我们有三个服务,每个服务都可以有多个容器在单个或多个主机上运行。 容器A是我们的API容器 容器B是我们的队列容器 容器C是我们的任务计划(cron)容器 所有这些容器运行相同的git-repo /源代码(PHP)。 唯一的区别是在容器中运行的进程: 容器A正在运行php-fpm 容器B正在运行一个队列监视守护进程(artisan队列) 容器C正在运行执行任何cron任务的crontab 目前在每个“服务”的dockerfile中,我们下载了git repo并启动相关的进程。 虽然最好有一个“数据”容器,以某种方式将代码提供给所有上述提及的容器。 题 我们如何创build一个充当其他容器“代码库”的容器? 将源文件从其文件系统安装到其他“服务”容器的文件系统中?

GeoIP PHP扩展不支持CentOS 7

我无法在CentOS 7和PHP 5.5.21上获得GeoIP PHP扩展。 我首先用yum install php-pecl-geoip并重新启动httpd。 然后我做了一个简单的testing: $record = geoip_record_by_name($_SERVER["REMOTE_ADDR"]); if ($record) { print_r($record); } 我得到了一个错误500,并在错误日志中,我看到 PHP Fatal error: Call to undefined function geoip_record_by_name() 所以我觉得yum软件包很糟糕,并删除它。 然后,我做了pecl install geoip并启用了扩展名为/etc/php.d/geoip.ini的extension=geoip.so并重新启动了httpd。 相同的错误 – 未定义的function。 为了确保安装正确,我再次尝试了pecl安装并收到了这个输出: pecl/geoip is already installed and is the same as the released version 1.0.8 我确实安装了Apache的mod_geoip。 做两个冲突吗? 我还能检查什么?

使用PHP从FTP下载文件时出错

我正在尝试使用PHP从FTP下载文件。 我已经testing了2台服务器的脚本,它工作正常。 但是在我需要运行这个脚本的服务器上却不起作用。 任何帮助将是可观的。 我得到这个错误。 警告:ftp_nb_fget():在第18行的/home/sites/example.com/public_html/path-to-file/download-file.php中将types设置为I. <?php ini_set("display_errors", "1"); error_reporting(E_ALL); $ftp_server = "server_address"; $ftp_username = "username"; $ftp_userpass = "password"; $ftp_conn = ftp_connect($ftp_server) or die("Could not connect to $ftp_server"); $login = ftp_login($ftp_conn, $ftp_username, $ftp_userpass); $src_file = 'source_file'; //File to write $dest_file = 'server_file'; //File to download $data_file = fopen($src_file, 'w'); // Initate the download $ret = […]

无法加载mod_rewrite Apache模块

我正在尝试使用Apache24 server mod_rewrite模块,但我无法加载它。 我知道有很多关于这个话题的问题,我经历了所有这些,但似乎没有任何工作。 这些是我一直沿用的步骤— CHANGED httpd.conf文件进行了这些更改: 一个。 LoadModule rewrite_module modules/mod_rewrite.so 湾 将AllowOverride None更改为AllowOverride All 重新启动Apache服务器 使用命令提示符命令httpd -M检查加载的模块。 我可以看到那里的mod_rewrite模块已经加载。 我附上下面的图片。 但执行所有这些步骤后,我看不到mod_rewrite作为加载模块在phpinfo 。 如上图所示,没有装载mod_rewrite模块。 另外作为一个狂野的黑客,我甚至尝试使用.htaccess文件重写url,但这是行不通的。 Apache似乎忽略了.htaccess文件,尽pipe我把这个文件放在我的根目录下。 Note: I am running `PHP` as an apache module Using `WAMP` stack Using `localhost` as server 我需要这个模块严重的URL重写的目的。 你们可以build议一些其他的方式来加载这个模块? 编辑 我试图从虚拟主机重写URL,因为答案表明模块已加载,它不依赖于.htaccess和info.php 。但stil不是redirect。 我在下面添加Virtual host设置— <VirtualHost *:80> <Directory "/Apache24/htdocs"> Options FollowSymLinks AllowOverride […]

用另一个回购版本replacePHP

我前一个巨大的错误,并安装/启用remi回购升级php。 这导致了我们的CRM软件包中的问题。 我想能够从primefaces返回到以前安装的PHP。 我试过执行: yum remove –nodeps php.x86_64 php-cli.x86_64 php-common.x86_64 php-devel.x86_64 php-gd.x86_64 php-imap.x86_64 php-ldap.x86_64 php-mbstring.x86_64 php-mcrypt.x86_64 php-mysqlnd.x86_64 php-pdo.x86_64 php-pear.noarch php-pecl-jsonc.x86_64 php-pecl-jsonc-devel.x86_64 php-pecl-zip.x86_64 php-process.x86_64 php-tidy.x86_64 php-xml.x86_64 这回来的依赖关系被删除(我认为会打破Plesk): Removing for dependencies: php-ioncube-loader x86_64 1:4.7.1-4.el6.art @atomic 7.3 M psa-horde noarch 5.2.6-cos6.build1205150821.14 @PLESK_12_5_30-dist 66 M psa-imp noarch 6.2.9-cos6.build1205150819.14 @PLESK_12_5_30-dist 18 M psa-ingo noarch 3.2.5-cos6.build1205150819.14 @PLESK_12_5_30-dist 4.5 M psa-kronolith noarch […]