标签: php

在 CentOS/RHEL Linux 上设置 Oracle 即时客户端 - 适用于 PHP 和 Perl

我正在尝试设置 CentOS 5.5/64 位 VM 以使用 PHP 和 Perl 脚本访问远程 Oracle 数据库。(我没有使用Oracle的经验,之前只编程和管理过一些PostgreSQl和MySQL。)

我已经安装了以下 Oracle Instant Client rpm:

oracle-instantclient11.2-basic-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-devel-11.2.0.2.0.x86_64.rpm
oracle-instantclient11.2-sqlplus-11.2.0.2.0.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

并将以下变量添加到我的 .bash_profile 中:

export TNS_ADMIN=/etc
export ORACLE_HOME=/usr/lib/oracle/11.2
export LD_LIBRARY_PATH=$ORACLE_HOME/client64/lib
PATH=$PATH:$HOME/bin:/sbin:$ORACLE_HOME/client64/bin
Run Code Online (Sandbox Code Playgroud)

/etc/tnsnames.ora我将从运行 Oracle 数据库的远程站点的同事那里收到的信息写入到该文件中:

some_string =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = my_address)(PORT = my_port))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = PDTT)
    )
  )
Run Code Online (Sandbox Code Playgroud)

好的部分是我现在可以通过运行从 CLI 进行连接

sqlplus 'my_user/my_password@//my_address:my_port/PDTT'
Run Code Online (Sandbox Code Playgroud)

然后可以通过发出以下命令查看一些表:

select table_name from user_tables;
Run Code Online (Sandbox Code Playgroud)

而且我已经sudo pecl install oci8成功运行,添加了包含以下内容的文件/etc/php.d/oci8.ini:

extension=oci8.so
Run Code Online (Sandbox Code Playgroud)

并可以看到以下 phpinfo() 输出

在此输入图像描述

现在我的疑问和问题请: …

oracle php perl

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

PHP+Apache作为正向/反向代理:如何在PHP中处理客户端请求和服务器响应?

我在正确配置 Apache mod_proxy.so 以便按需要工作时遇到很多麻烦......

主要思想是在网络中的本地计算机上创建一个代理,该代理将能够在 PHP 中处理客户端请求(通过 Apache 准备的代理连接的客户端)。而且,它也有能力处理 PHP 上的服务器响应。

这是两个功能,它们彼此独立。

让我介绍一下我需要实现的目标:

替代文本

正如您在这里看到的,有两种方法:蓝色一种和红色一种。

对于蓝色的,我基本上连接了本地网络(家庭)上的客户端(机器 B - 手机),并将其配置为通过代理,即同一网络上的机器 A(个人计算机)。

所以我们可以说(不是 DHCP):

机器 A: 192.168.1.40 --> Apache 正在该机器上运行,并配置为侦听端口 80。

机器 B(手机): 192.168.1.75 --> 配置为通过代理,即 IP 192.168.1.75 和端口 80(基本上是机器 A)。

正确配置 Apache 后,基本上是从 httpd.conf 中删除 mod_proxy.so(主要工作程序)、mod_proxy_connect.so(SSL、allowCONNECT,...)和 mod_proxy_http.so(需要处理 HTTP 请求/响应),在我的例子中,有这样的行:

# Implements a proxy/gateway for Apache.
Include "conf/extra/httpd-proxy.conf"

# Various default settings
Include "conf/extra/httpd-default.conf"

# Secure (SSL/TLS) connections
Include "conf/extra/httpd-ssl.conf"
Run Code Online (Sandbox Code Playgroud)

这使我能够配置文件 httpd-proxy.conf 来准备正向代理或反向代理。

所以我不确定我需要的是正向代理还是反向代理。

对于转发代理,我这样做了:

<IfModule proxy_module>
<IfModule proxy_http_module>

#
# FORWARD Proxy …
Run Code Online (Sandbox Code Playgroud)

php proxy process apache-2.2

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

“脚本标题过早结束”发生,看似随机

我的 Apache 错误日志偶尔会显示错误“发生脚本标头过早结束”,并且当发生这种情况时,我的网站似乎会向浏览器返回 500 内部服务器错误。奇怪的是,这种情况会持续几分钟,然后一切都会恢复正常。

php apache-2.2

5
推荐指数
1
解决办法
3753
查看次数

Apache 执行 HTML,但不执行 PHP;PHP CLI 可以工作

我在 rhel 6.2 上使用 Apache 2.2.15 运行 php 5.3.3,但无法让 Apache 解释 PHP 代码。

没有错误(在系统日志、httpd/error_log 或 php_errors.log 中) - 我已在 php.ini 中启用错误报告:

error_reporting = E_ALL & ~E_DEPRECATED
display_errors = On
log_errors = On
error_log = /var/log/php_errors.log
Run Code Online (Sandbox Code Playgroud)

然而,当我直接从浏览器(例如 myserver.com/index.php)查看包含以下代码的 index.php 时,除了白屏之外什么都没有出现:

<?php echo 'Hello php World'; ?>
Run Code Online (Sandbox Code Playgroud)

当在命令行上执行 php 时,我得到了终端的预期文本输出(“ Hello php World”)。

当我将一些 HTML 添加到 index.php 时,如下所示:

<html>
    <p>Hello from within html</p>
    <?php echo 'Hello php World'; ?>
</html>
Run Code Online (Sandbox Code Playgroud)

并用我的浏览器查看它,它只返回“ Hello from within html。” 但是,当从命令行执行时,我得到:

<html>
    <p>Hello from within …
Run Code Online (Sandbox Code Playgroud)

unix php php-cli apache-2.2

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

使用 nginx 防止大文件上传

我使用 Nginx 作为网络服务器来为我的网站提供服务。我向我的用户提供上传功能(允许他们提交最大 5Mb 的图片),因此我有指令:client_max_body_size 5M;在我的服务器配置中。我注意到,如果我尝试上传任何文件,网络服务器不会阻止上传更大的文件。举个例子,假设我尝试上传一个 700Mb 的大视频(电影)。服务器不会立即拒绝上传,但它会缓冲整个数据(花费很长时间并减慢服务器速度),并且仅在上传结束时才返回错误413 Request entity too large。

所以问题是:有没有办法正确配置Nginx,以在传输的数据开始超过我的client_max_body_size限制时阻止大文件上传?

我认为使用我的实际设置进行生产确实不安全,而且我在谷歌上找不到任何有用的东西。

编辑:

我使用 php 和 Symfony2 作为后端......

编辑(再次):

这是我的 error.log 中出现的内容:

2013/01/28 11:14:11 [error] 11328#0: *37 client intended to send too large body: 725207449 bytes, client: 33.33.33.1, server: www.local.example.com, request: "POST /app_dev.php/api/image/add/byuploader HTTP/1.1", host: "local.example.com", referrer: "http://local.example.com/app_dev.php/"`
Run Code Online (Sandbox Code Playgroud)

奇怪的是,我正在监视我的 nginx error.log,并且tail -f error.log在上传开始时(在结束之前)立即出现该消息。所以 nginx 会进行某种预防性检查,但它不会停止/分块上传请求......

我还尝试通过在处理上传的页面上发出 a 来验证 php 是否获得上传的控制权echo 'something'; die();,但它没有打印出任何内容,也没有停止上传请求。所以应该是nginx或一些php内部使整个上传继续,直到完全传输......

另一个编辑:这是我的视图top(监视 nginx 和 …

php nginx limitations upload

5
推荐指数
1
解决办法
6413
查看次数

DKIM 主体哈希失败

我们从 PHP 应用程序发送带有 EXIM 4.71 的电子邮件。DKIM 已启用并正常工作,除非发送特定类型的邮件时,这会导致dkim=neutral (body hash did not verify)。

Received-SPF: pass (google.com: domain of no-reply@letsrace.se designates 2a02:750:5::256 as permitted sender) client-ip=2a02:750:5::256;
Authentication-Results: mx.google.com;
       spf=pass (google.com: domain of no-reply@letsrace.se designates 2a02:750:5::256 as permitted sender) smtp.mail=no-reply@letsrace.se;
       dkim=neutral (body hash did not verify) header.i=@letsrace.se
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=letsrace.se; s=dkim;
    h=Content-Transfer-Encoding:Content-Type:Reply-To:From:Subject:To:Message-Id:Date; bh=9CkFmpgBio6ql+M36DtO8Gbw8keno3PlJ6db2JTrwy4=;
    b=ILyB0JLZLWTig346yGWzmOwk+bEgr0k3hjYyPovA4B3+ggRshzTX9yDeAeklEmYaq4H768zZc0Vn6tR9YpngllkHJ6XTf3lTPr570yWOEhE8dvCkq+M0CBXmxEApHJmoKq2Oeh7sFCHVWGiN8JXYa8ohgsSFEd5Z+xHFlj3AvbI=;
Run Code Online (Sandbox Code Playgroud)

失败的电子邮件类型包含通过网站上的 HTML 表单输入的消息,并且从此应用程序发送的其他邮件都正常。我一直怀疑混合行结尾是罪魁祸首,但无法通过标准化行结尾来改善这种情况。

EXIM 在创建 DKIM 哈希后是否执行一些清理?

有任何想法吗?

php exim dkim

5
推荐指数
1
解决办法
5888
查看次数

php-fpm 使用大量 cpu

我在 Ubuntu 12.04 上使用 WordPress,在我的 VPS 上使用 Nginx + php-fpm。有2个CPU核心+4096Mb内存。

我已将 mysql 数据库移至另一台服务器并设置远程访问。同时大约有 300 个在线访问者,php-fpm 使用的 CPU 确实很多:

在此输入图像描述

我还对 WordPress 使用 APC-cache 和 batcache。

php-fpm 配置:

listen = /var/run/fpm-macradar.sock
;listen.backlog = -1

pm = ondemand
pm.max_children = 30
pm.start_servers = 15
pm.min_spare_servers = 10
pm.max_spare_servers = 20
;pm.process_idle_timeout = 10s;
pm.max_requests = 500

pm.status_path = /status

chdir = /

request_slowlog_timeout = 60s
slowlog = /var/log/$pool.log.slow

request_terminate_timeout = 120s
rlimit_files = 131072
rlimit_core = unlimited
catch_workers_output = yes

;php_flag[display_errors] = off …
Run Code Online (Sandbox Code Playgroud)

php nginx central-processing-unit php-fpm

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

Apache/PHP ldap 停止工作。需要重启apache

我当前的设置是用户使用 LDAP 凭据登录网站。这都是内部的,所以我不太关心证书。所以,在我的/etc/openldap/ldap.conf文件中我有TLS_REQCERT never. 在将其添加到文件之前,我总是收到错误Error Binding to LDAP: TLS: hostname does not match CN in peer certificate。添加后,一切似乎都工作正常。然而现在我发现一段时间后,也许几个小时到一天后,登录将再次失败,我将开始收到该错误。如果我重新启动 apache,一段时间内一切都会恢复正常。然后再次弹出错误。是什么导致这种情况持续发生?服务器是CentOS 6.5。

php openldap apache-2.2 centos6.5

5
推荐指数
1
解决办法
3550
查看次数

PHP OPcache 自动重置缓存

我开始使用 PHP 5.6 内置的 PHP OPcache,现在面临一个问题。我将其设置为最多使用 1 GB RAM,这对于我的网站来说已经足够了,但它永远无法使用完整的 1 GB RAM。在分配此限制之前,缓存会被清除多次,如您在 munin 图上看到的那样:

\n\n

在此输入图像描述\n在此输入图像描述

\n\n

因此,每隔几天它就会从缓存中删除所有文件,然后重新开始缓存它们。

\n\n

首先我认为问题出在变量上opcache.max_wasted_percentage,但它并不关心我设置的值。我的配置如下:

\n\n
; configuration for php ZendOpcache module\n; priority=05\nzend_extension=opcache.so\nopcache.enable = 1\nopcache.enable_cli = 1\nopcache.memory_consumption = 1024\nopcache.interned_strings_buffer = 128\nopcache.blacklist_filename = /etc/php5/opcache_blacklist.txt\nopcache.max_accelerated_files = 65407\nopcache.revalidate_freq = 5\nopcache.fast_shutdown = 1\nopcache.max_wasted_percentage = 50\nopcache.enable_file_override = 1\n
Run Code Online (Sandbox Code Playgroud)\n\n

我\xe2\x80\x99m在带有nginx和FastCGI的最新Debian Jessie环境中使用它。

\n\n

我想实现只有当内存消耗达到 1 GB 时才清除缓存。我已经尝试过一个非常小的配置,如下所示:

\n\n
; configuration for php ZendOpcache module\n; priority=05\nzend_extension=opcache.so\nopcache.enable = 1\nopcache.enable_cli = 1\nopcache.memory_consumption = 1024\n
Run Code Online (Sandbox Code Playgroud)\n\n

即便如此,问题仍然存在。

\n\n

如果需要 FPM 配置:

\n\n
user …
Run Code Online (Sandbox Code Playgroud)

php memory php-fpm opcache

5
推荐指数
1
解决办法
3765
查看次数

php-fpm 和 nginx @ CPU 使用率高?

我的服务器使用的是 DigitalOcean,计划如下:

2 Core Processor
2 GB Memory
Run Code Online (Sandbox Code Playgroud)

我的网站收到了数千名访问者,但是,两个 CPU 核心都是 @ 100%:

在此输入图像描述

问题似乎在于php-fpm和nginx: worker process。我对我的服务器做了几十次优化,但我仍然无法让它平静下来。

这是我的nginx.conf:

user www-data;
worker_processes 2;
pid /run/nginx.pid;

events {
    worker_connections 2048;
    # multi_accept on;
}

http {

    ##
    # Basic Settings
    ##

    sendfile on;
    tcp_nopush on;
    tcp_nodelay on;
    keepalive_timeout 65;
    types_hash_max_size 2048;
    server_tokens off;

    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;

    # server_names_hash_bucket_size 64;
    # server_name_in_redirect off;

    include /etc/nginx/mime.types;
    default_type application/octet-stream;

    ##
    # Logging Settings
    ##

    access_log off;
    error_log /var/log/nginx/error.log;

    ## …
Run Code Online (Sandbox Code Playgroud)

ubuntu php performance nginx php-fpm

5
推荐指数
1
解决办法
6563
查看次数