當前位置:首頁 » 編程語言 » envphp

envphp

發布時間: 2022-12-09 12:38:24

『壹』 php 伺服器變數$_SERVER 伺服器環境變數 $_ENV

PHP  $_SERVER 變數

$_SERVER 是一個包含諸如頭信息(header)、路徑(path)和腳本位置(script locations)的數組。它是 PHP 中一個超級全局變數,我們可以在 PHP 程序的任何地方直接訪問它。

$_SERVER 包含著眾多的信息,你可以嘗試直接列印它:

print_r($_SERVER);

$_SERVER 數組元素

更多情況下,我們只需要 $_SERVER 數組中的某些元素(數組單元)。$_SERVER 數組包含的元素如下:

頁面程序相關

$_SERVER[『PHP_SELF』]:相對於網站根目錄的路徑及 PHP 程序名稱,與 document root 相關。

$_SERVER[『HTTP_REFERER』]:鏈接到當前頁面的前一頁面的 URL 地址。

$_SERVER[『SCRIPT_NAME』]:相對於網站根目錄的路徑及 PHP 程序文件名稱 。

$_SERVER[『REQUEST_URI』]:訪問此頁面所需的 URI 。

$_SERVER[『SCRIPT_FILENAME』]:當前運行 PHP 程序的絕對路徑及文件名。

$_SERVER[『PATH_TRANSLATED』]:當前 PHP 程序所在文件系統(不是文檔根目錄)的基本路徑。

$_SERVER[『QUERY_STRING』]:查詢(query)的字元串(URL 中第一個問號 ? 之後的內容但不包括 # 後面的內容)。

$_SERVER[『argv』]:傳遞給當前 PHP 程序的參數。

$_SERVER[『argc』]:命令行模式下,包含傳遞給程序的命令行參數的個數。

$_SERVER[『REQUEST_TIME』]:請求開始時的時間戳,從 PHP 5.1.0 起有效。

$_SERVER[『REQUEST_METHOD』]:訪問頁面時的請求方法,例如:「GET」、「HEAD」,「POST」或「PUT」。

$_SERVER[『HTTP_ACCEPT』]:當前請求的 Accept: 頭信息的內容。

$_SERVER[『HTTP_ACCEPT_CHARSET』]:當前請求的 Accept-Charset: 頭信息的內容。例如:「iso-8859-1,*,utf-8」。

$_SERVER[『HTTP_ACCEPT_ENCODING』]:當前請求的 Accept-Encoding: 頭信息的內容。例如:「gzip」。

$_SERVER[『HTTP_ACCEPT_LANGUAGE』]:當前請求的 Accept-Language: 頭信息的內容。例如:「zh-cn」。

$_SERVER[『HTTP_CONNECTION』]:當前請求的 Connection: 頭信息的內容。例如:「Keep-Alive」。

$_SERVER[『HTTP_HOST』]:當前請求的 Host: 頭信息的內容。

$_SERVER[『HTTPS』]:如果 PHP 程序是通過 HTTPS 協議被訪問,則被設為一個非空的值。

$_SERVER[『PHP_AUTH_DIGEST』]:當作為 Apache 模塊運行時,進行 HTTP Digest 認證的過程中,此變數被設置成客戶端發送的「Authorization」HTTP 頭內容(以便作進一步的認證操作)。

$_SERVER[『PHP_AUTH_USER』]:當 PHP 運行在 Apache 或 IIS(PHP 5 是 ISAPI)模塊方式下,並且正在使用 HTTP 認證功能,這個變數便是用戶輸入的用戶名。

$_SERVER[『PHP_AUTH_PW』]:當 PHP 運行在 Apache 或 IIS(PHP 5 是 ISAPI)模塊方式下,並且正在使用 HTTP 認證功能,這個變數便是用戶輸入的密碼。

$_SERVER[『AUTH_TYPE』]:當 PHP 運行在 Apache 模塊方式下,並且正在使用 HTTP 認證功能,這個變數便是認證的類型。

伺服器端相關

$_SERVER[『DOCUMENT_ROOT』]:當前運行 PHP 程序所在的文檔根目錄,在伺服器配置文件中定義。

$_SERVER[『GATEWAY_INTERFACE』]:伺服器使用的 CGI 規范的版本,例如:「CGI/1.1」。

$_SERVER[『SERVER_ADDR』]:當前運行 PHP 程序所在的伺服器的 IP 地址。

$_SERVER[『SERVER_NAME』]:當前運行 PHP 程序所在的伺服器的名稱。

$_SERVER[『SERVER_ADMIN』]:Apache 伺服器配置文件中的 SERVER_ADMIN 參數。

$_SERVER[『SERVER_PORT』]:伺服器所使用的埠。如果使用 SSL 安全連接,則這個值為用戶設置的 HTTP 埠。

$_SERVER[『SERVER_SIGNATURE』]:包含伺服器版本和虛擬主機名的字元串。

$_SERVER[『SERVER_SOFTWARE』]:伺服器標識的字串,在響應請求時的頭信息中給出。

$_SERVER[『SERVER_PROTOCOL』]:請求頁面時通信協議的名稱和版本,例如:「HTTP/1.0」。

其他雜項

$_SERVER[『HTTP_USER_AGENT』]:當前請求的 User-Agent: 頭信息的內容,該字元串表明了訪問該頁面的用戶代理的信息。

$_SERVER[『REMOTE_ADDR』]:正在瀏覽當前頁面用戶的 IP 地址。

$_SERVER[『REMOTE_HOST』]:正在瀏覽當前頁面用戶的主機名。

$_SERVER[『REMOTE_PORT』]:用戶連接到伺服器時所使用的埠。

注意,如果以命令行方式運行 PHP,上面列出的元素幾乎沒有有效的(或是沒有任何實際意義的)。

PHP $_ENV 變數

$_ENV 是一個包含伺服器端環境變數的數組。它是 PHP 中一個超級全局變數,我們可以在 PHP 程序的任何地方直接訪問它。

$_ENV 只是被動的接受伺服器端的環境變數並把它們轉換為數組元素,你可以嘗試直接列印它:

print_r($_ENV);

限於篇幅,在此不再列出列印的結果,且不同的伺服器上,列印出的結果可能是完全不同的。

$_ENV 數組元素

$_ENV 數組中的元素(數組單元)隨伺服器環境不同而有較大差異,所以無法像 $_SERVER 那樣列出完整的列表。以下是 $_ENV 數組包含的比較通用的元素:

$_SERVER[『PATH』]:環境變數 PATH 路徑。

$_SERVER[『CLASSPATH』]:系統 CLASSPATH 路徑。

$_SERVER[『LIB』]:系統 LIB 庫路徑。

$_SERVER[『INCLUDE』]:系統 Include 路徑,注意與 PHP 的包含路徑是不一樣的。

$_SERVER[『OS』]:操作系統類型。

$_SERVER[『LANG』]:系統語言,如 en_US 或 zh_CN。

$_SERVER[『PWD』]:當前工作目錄。

$_SERVER[『TEMP』]:系統 TEMP 路徑。

$_SERVER[『AP_PARENT_PID』]:當前進程 ID 號。

$_SERVER[『NUMBER_OF_PROCESSORS』]:系統 CPU 數目。

$_ENV 為空的原因及解決辦法

如果列印輸出 $_ENV 為空,可以檢查一下 php.ini 的配置:

variables_order = "EGPCS"

上述配置表示 PHP 接受的外部變數來源及順序,EGPCS 是 Environment、Get、Post、Cookies 和 Server 的縮寫。如果 variables_order 的配置中缺少 E ,則 PHP 無法接受環境變數,那麼 $_ENV 也就為空了。

『貳』 php的$_ENV[ ]是干什麼

php中的$_ENV存儲了一些系統的環境變數,因環境不同而值不同.
但有時候$_ENV是空的,可能有以下原因:
在php.ini中的variables_order值為"GPCS",也就是說系統在定義PHP預定義變數時的順序是GET,POST,COOKIES,SERVER,沒有定義Environment(E),
php程序員站
你可以修改php.ini文件的variables_order值為你想要的順序,如:"EGPCS"。這時,$_ENV的值就可以取得了
phperz.com
EGPCS值:
php程序員站
(EGPCS是Environment、Get、Post、Cookies、Server的縮寫
--
這是PHP中外部變數來源的全部范圍).
php程序員站
你可以用foreach來遍歷$_ENV的數據,也可以直接用print_r($_ENV)來列印這個變數,查看他的數據.

『叄』 php環境搭建問題!

哥,這里不給放鏈接的。。。。
win7 64bit
一、相關准備:
Apache軟體:httpd-2.4.10-win64-VC11.zip
PHP軟體:php-5.5.17-Win32-VC11-x64.zip
Mysql軟體:mysql-5.6.21-winx64.zip
編譯支持環境: vcredist_x64.exe(VC11)(先安裝)
運行環境目錄:
C:\myenv\apache (Apache)
C:\myenv\php (PHP)
C:\myenv\mysql (MySQL)
C:\myenv\sessiontmp (運行期間session存放目錄,可讀寫)
C:\myenv\ fileuploadtmp (運行期間PHP文件上傳存放目錄,可讀寫)
二、安裝Apache服務
1、解壓httpd-2.4.10-win64-VC11.zip變重命名文件夾為apache,將其復制到C:\myenv\目錄下。

2、編輯C:\myenv\apache\conf\httpd.conf配置文件,主要配置事項如下,紅色字體代表新增:
ServerRoot "c:/myenv/apache"
Listen 80
#載入PHP模塊
LoadMole php5_mole C:/myenv/php/php5apache2_4.dll
PHPIniDir "C:/myenv/php」 (注意留一個空格)

ServerAdmin [email protected]
ServerName 127.0.0.1:80
DocumentRoot "c:/myenv/apache/htdocs"

DirectoryIndex index.php index.html

ScriptAlias /cgi-bin/ "c:/myenv/apache/cgi-bin/"

AddType application/x-httpd-php .php
AddType application/x-httpd-php .html
AddType application/x-httpd-php .htm

3、啟動Apache服務
管理員身份啟動cmd.exe程序
Start apache in a DOS commdline:
>httpd.exe
Install as a service:
>httpd.exe -k install
Run ApacheMonitor:
Double click ApacheMonitor.exe

4、測試Apache是否正常服務:
http://localhost/index.html

三、安裝PHP服務插件
1、解壓php-5.5.17-Win32-VC11-x64.zip變重命名文件夾為php,將其復制到C:\myenv\目錄下。
2、將C:\myenv\php\php.ini-development配置文件重命名為php.ini配置文件,打開php.ini文件,做如下的配置操作:
;On windows下面的;extension_dir = "ext"

修改為如下:

extension_dir = "C:/myenv/php/ext" 前面的分號;去掉。

開啟相應的擴展庫功能,比如php_mysql.dll等,即將
extension=php_bz2.dll
extension=php_curl.dll
extension=php_gd2.dll
extension=php_mbstring.dll
extension=php_mysql.dll
extension=php_pdo_mysql.dll
extension=php_pdo_odbc.dll
extension=php_xmlrpc.dll
這些extension前面的分號;去掉。(;代表注釋掉的意思)

配置session文件在伺服器上的保存目錄
;session.save_path = "/tmp" 前面的分號;去掉
或修改為session.save_path = "C:/myenv/sessiontmp"(前面的分號;去掉)

配置PHP的文件上傳功能
;upload_tmp_dir =
或修改為upload_tmp_dir = "C:/myenv/fileuploadtmp"(前面的分號;去掉)

配置時間區域
;date.timezone =
修改為date.timezone = Asia/Shanghai (前面的分號;去掉)

PHP5默認MySQL是關閉的,要將C:\myenv\php文件夾下的libenchant_myspell.dll和C:\myenv\php\ext文件夾里的php_mysql.dll考到C:/Windows/System32裡面;

3、測試Apache+php是否安裝成功:
http://localhost/testphpinfo.php(見本文末尾有代碼)

四、安裝MySQL服務
1、解壓mysql-5.6.21-winx64.zip變重命名文件夾為mysql,將其復制到C:\myenv\目錄下。

2、將C:\myenv\mysql\my-default.ini配置文件重命名為my.ini配置文件,打開my.ini文件,做如下的配置操作:
[client]
#設置mysql客戶端默認字元集
default-character-set = utf8

[mysqld]
#設置mysql的安裝目錄
basedir = C:\myenv\mysql

#設置mysql資料庫的數據存放目錄
datadir = C:\myenv\mysql\data

#設置3306埠
port = 3306

#設置允許最大連接數
max_connections = 200

#設置伺服器端字元集
character-set-server = utf8

#創建新表時將使用的默認存儲引擎
default-storage-engine = INNODB
# server_id = .....

3、啟動MySQL
以管理員身份運行cmd.exe,將目錄切換到mysql的bin目錄下,輸入:Mysqld –install,如下圖所示

出現安裝OK後。接著輸入net start mysql 啟動服務
以上表示mysql服務啟動成功
設置密碼root用戶的密碼為root15w05
在cmd中輸入:mysql –u root,如下圖
mysql>use mysql;
mysql>update user set password=PASSWORD(「root15w05」) where user=』root』;
mysql>flush privileges;
mysql>quit;

root用戶密碼修改成功!

4、測試Apache+PHP+MySQL運行環境
http:/localhost/testdbconn.php

『肆』 Laravel 中的 config/app.php 和 env 關系是怎樣的

這個需求很普遍的,比如調用訂單的日誌,需要記錄到order.log,獲取店鋪信息的記錄需要記錄到shop.log中去。可以這么做:
<?php

use Monolog\Logger;
use Monolog\Handler\StreamHandler;
use Illuminate\Log\Writer;

class BLogger
{
// 所有的LOG都要求在這里注冊
const LOG_ERROR = 'error';

private static $loggers = array();

// 獲取一個實例
public static function getLogger($type = self::LOG_ERROR, $day = 30)
{
if (empty(self::$loggers[$type])) {
self::$loggers[$type] = new Writer(new Logger($type));
self::$loggers[$type]->useDailyFiles(storage_path().'/logs/'. $type .'.log', $day);
}

$log = self::$loggers[$type];
return $log;
}
}

這樣不同的日誌數據會被存儲到不同的日誌文件中去。還能記錄日誌數據信息。
laravel的錯誤日誌堆棧太長了,怎麼辦看
使用上面的BLogger類,在start/global.php記錄下必要的錯誤信息
// 錯誤日誌信息
App::error(function(Exception $exception, $code)
{
Log::error($exception);

$err = [
'message' => $exception->getMessage(),
'file' => $exception->getFile(),
'line' => $exception->getLine(),
'code' => $exception->getCode(),
'url' => Request::url(),
'input' => Input::all(),
];
BLogger::getLogger(BLogger::LOG_ERROR)->error($err);
});

laravel默認的日誌沒有使用分割
所以應該默認把laravel的默認日誌記錄改成有分割的。
同樣在start/global.php中
Log::useDailyFiles(storage_path().'/logs/laravel.log', 30);

『伍』 env變數為null如何解決

打開 .env 文件看,這些都是有值的:

APP_ENV=local
APP_KEY=base64:JHE5bOkRg283uT0n1Zq/GgvGEer8ooYiB42/wIcCyvo=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://www.tanteng.me

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=tanteng.me
DB_USERNAME=homestead
DB_PASSWORD=secret

如圖所示:

原因何在?

在 Laravel 中,如果執行php aritisan config:cache命令,Laravel 將會把 app/config 目錄下的所有配置文件「編譯」整合成一個緩存配置文件到 bootstrap/cache/config.php,每個配置文件都可以通過env函數讀取環境變數,這里是可以讀取的。但是一旦有了這個緩存配置文件,在其他地方使用env函數是讀取不到環境變數的,所以返回null.

讓我們看看這段代碼,Illuminate/Foundation/Bootstrap/DetectEnvironment.php line 18:

public function bootstrap(Application $app)
{
if (! $app->configurationIsCached()) {
$this->($app);

try {
(new Dotenv($app->environmentPath(), $app->environmentFile()))->load();
} catch (InvalidPathException $e) {
//
}
}
}

這個方法在框架啟動後就會運行,這段代碼說明了如果存在緩存配置文件,就不會去設置環境變數了,配置都讀緩存配置文件,而不會再讀環境變數了。

因此,在配置文件即 app/config 目錄下的其他地方,讀取配置不要使用env函數去讀環境變數,這樣你一旦執行php artisan config:cache之後,env函數就不起作用了。所有要用到的環境變數,在 app/config 目錄的配置文件中通過 env 讀取,其他地方要用到環境變數的都統一讀配置文件而不是使用env函數讀取。

『陸』 $_ENV是干什麼用的

PHP中的$_ENV是一個包含伺服器端環境變數的數組。它是PHP中一個超級全局變數,我們可以在PHP 程序的任何地方直接訪問它。

$_ENV只是被動的接受伺服器端的環境變數並把它們轉換為數組元素,你可以嘗試直接輸出它。

當你想看看一個變數中究竟有什麼東西在裡面時,我所知道的方式有三種:
1、var_mp($_ENV);
2、print_r($_ENV);
3、foreach($_ENV as $key=>$val){echo $key.'--------'.$val.'<br>';}
這三種方式中,第一種我覺得最方便而且輸出的內容格式清晰。

由於$_ENV變數是取決於伺服器的環境變數的,從不同的伺服器上獲取的$_ENV變數列印出的結果可能是完全不同的。所以無法像$_SERVER 那樣列出完整的列表。以下是$_ENV 數組包含的比較通用的元素:
有時候,$_ENV會為空,其原因通常是php的配置文件php.ini的配置項為:variables_order = "GPCS"。要想讓$_ENV的值不為空,那麼variables_order的值應該加上一個大寫字母「E」,即:variables_order = "EGPCS"。

上述配置表示了PHP接受的外部變數來源及順序,EGPCS是Environment、Get、Post、Cookies、Server的縮寫。如果variables_order 的配置中缺少E ,則PHP 無法接受環境變數,那麼$_ENV 也就為空了。

由於開啟$_ENV,即variables_order = "EGPCS"會導致一些性能損失,按php官方的說法是,在生產環境中,不推薦使用。他們更推薦使用getenv (string $varname)函數來獲取Environment中的值,而這點需要在編程時就注意到。如果編程時用了$_ENV而variables_order中又沒有配置為variables_order = "EGPCS",則程序運行時可能會報錯。

『柒』 如何 在Docker窗口中部署PHP開發環境

環境部署一直是一個很大的問題,無論是開發環境還是生產環境,但是 Docker
將開發環境和生產環境以輕量級方式打包,提供了一致的環境。極大的提升了開發部署一致性。當然,實際情況並沒有這么簡單,因為生產環境和開發環境的配置是完全不同的,比如日誌等的問題都需要單獨配置,但是至少比以前更加簡單方便了,這里以
PHP 開發作為例子講解 Docker 如何布置開發環境。

一般來說,一個 PHP 項目會需要以下工具:

Web 伺服器: Nginx/Tengine

Web 程序: PHP-FPM

資料庫: MySQL/PostgreSQL

緩存服務: Redis/Memcache

這是最簡單的架構方式,在 Docker 發展早期,Docker 被大量的濫用,比如,一個鏡像內啟動多服務,日誌收集依舊是按照 Syslog
或者別的老方式,鏡像容量非常龐大,基礎鏡像就能達到 80M,這和 Docker 當初提出的思想完全南轅北轍了,而 Alpine linux
發行版作為一個輕量級 Linux 環境,就非常適合作為 Docker 基礎鏡像,Docker 官方也推薦使用 Alpine 而不是 Debian
作為基礎鏡像,未來大量的現有官方鏡像也將會遷移到 Alpine 上。本文所有鏡像都將以 Alpine 作為基礎鏡像。

Nginx/Tengine

這部分筆者已經在另一篇文章 Docker 容器的 Nginx 實踐中講解了 Tengine 的 Docker 實踐,並且給出了
Dockerfile,由於比較偏好 Tengine,而且官方已經給出了 Nginx 的 alpine 鏡像,所以這里就用
Tengine。筆者已經將鏡像上傳到官方 DockerHub,可以通過

<code>docker pull chasontang/tengine:2.1.2_f</code>

獲取鏡像,具體請看 Dockerfile。

PHP-FPM

Docker 官方已經提供了 PHP 的 7.0.7-fpm-alpine 鏡像,Dockerfile 如下:

FROM alpine:3.4

# persistent / runtime deps
ENV PHPIZE_DEPS \
autoconf \
file \
g++ \
gcc \
libc-dev \
make \
pkgconf \
re2c
RUN apk add --no-cache --virtual .persistent-deps \
ca-certificates \
curl

# ensure www-data user exists
RUN set -x \
&& addgroup -g 82 -S www-data \
&& adser -u 82 -D -S -G www-data www-data
# 82 is the standard uid/gid for "www-data" in Alpine
# http://git.alpinelinux.org/cgit/aports/tree/main/apache2/apache2.pre-install?h=v3.3.2
# http://git.alpinelinux.org/cgit/aports/tree/main/lighttpd/lighttpd.pre-install?h=v3.3.2
# http://git.alpinelinux.org/cgit/aports/tree/main/nginx-initscripts/nginx-initscripts.pre-install?h=v3.3.2

ENV PHP_INI_DIR /usr/local/etc/php
RUN mkdir -p $PHP_INI_DIR/conf.d

##<autogenerated>##
ENV PHP_EXTRA_CONFIGURE_ARGS --enable-fpm --with-fpm-user=www-data --with-fpm-group=www-data
##</autogenerated>##

ENV GPG_KEYS

ENV PHP_VERSION 7.0.7
ENV PHP_FILENAME php-7.0.7.tar.xz
ENV PHP_SHA256

RUN set -xe \
&& apk add --no-cache --virtual .build-deps \
$PHPIZE_DEPS \
curl-dev \
gnupg \
libedit-dev \
libxml2-dev \
openssl-dev \
sqlite-dev \
&& curl -fSL "http://php.net/get/$PHP_FILENAME/from/this/mirror" -o "$PHP_FILENAME" \
&& echo "$PHP_SHA256 *$PHP_FILENAME" | sha256sum -c - \
&& curl -fSL "http://php.net/get/$PHP_FILENAME.asc/from/this/mirror" -o "$PHP_FILENAME.asc" \
&& export GNUPGHOME="$(mktemp -d)" \
&& for key in $GPG_KEYS; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done \
&& gpg --batch --verify "$PHP_FILENAME.asc" "$PHP_FILENAME" \
&& rm -r "$GNUPGHOME" "$PHP_FILENAME.asc" \
&& mkdir -p /usr/src \
&& tar -Jxf "$PHP_FILENAME" -C /usr/src \
&& mv "/usr/src/php-$PHP_VERSION" /usr/src/php \
&& rm "$PHP_FILENAME" \
&& cd /usr/src/php \
&& ./configure \
--with-config-file-path="$PHP_INI_DIR" \
--with-config-file-scan-dir="$PHP_INI_DIR/conf.d" \
$PHP_EXTRA_CONFIGURE_ARGS \
--disable-cgi \
# --enable-mysqlnd is included here because it's harder to compile after the fact than extensions are (since it's a plugin for several extensions, not an extension in itself)
--enable-mysqlnd \
# --enable-mbstring is included here because otherwise there's no way to get pecl to use it properly (see https://github.com/docker-library/php/issues/195)
--enable-mbstring \
--with-curl \
--with-libedit \
--with-openssl \
--with-zlib \
&& make -j"$(getconf _NPROCESSORS_ONLN)" \
&& make install \
&& { find /usr/local/bin /usr/local/sbin -type f -perm +0111 -exec strip --strip-all '{}' + || true; } \
&& make clean \
&& runDeps="$( \
scanelf --needed --nobanner --recursive /usr/local \
| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
| sort -u \
| xargs -r apk info --installed \
| sort -u \
)" \
&& apk add --no-cache --virtual .php-rundeps $runDeps \
&& apk del .build-deps

COPY docker-php-ext-* /usr/local/bin/

##<autogenerated>##
WORKDIR /var/www/html

RUN set -ex \
&& cd /usr/local/etc \
&& if [ -d php-fpm.d ]; then \
# for some reason, upstream's php-fpm.conf.default has "include=NONE/etc/php-fpm.d/*.conf"
sed 's!=NONE/!=!g' php-fpm.conf.default | tee php-fpm.conf > /dev/null; \
cp php-fpm.d/www.conf.default php-fpm.d/www.conf; \
else \
# PHP 5.x don't use "include=" by default, so we'll create our own simple config that mimics PHP 7+ for consistency
mkdir php-fpm.d; \
cp php-fpm.conf.default php-fpm.d/www.conf; \
{ \
echo '[global]'; \
echo 'include=etc/php-fpm.d/*.conf'; \
} | tee php-fpm.conf; \
fi \
&& { \
echo '[global]'; \
echo 'error_log = /proc/self/fd/2'; \
echo; \
echo '[www]'; \
echo '; if we send this to /proc/self/fd/1, it never appears'; \
echo 'access.log = /proc/self/fd/2'; \
echo; \
echo 'clear_env = no'; \
echo; \
echo '; Ensure worker stdout and stderr are sent to the main error log.'; \
echo 'catch_workers_output = yes'; \
} | tee php-fpm.d/docker.conf \
&& { \
echo '[global]'; \
echo 'daemonize = no'; \
echo; \
echo '[www]'; \
echo 'listen = [::]:9000'; \
} | tee php-fpm.d/zz-docker.conf

EXPOSE 9000
CMD ["php-fpm"]
##</autogenerated>##

『捌』 php手把手教你做網站(二十九)thinkphp6部署多個資料庫

前邊介紹了負載均衡,mysql同步,接下來介紹tp6分布式部署多個資料庫,實現讀寫分離。

tp6的分布式部署讀和寫仍然是一個系統,這里我們分開操作,給用戶展示的就是從資料庫,後端添加文章就是主庫,然後同步到從庫。

1、配置資料庫鏈接參數

目標:實現隨機使用資料庫展示信息,只是讀操作。

測試:前台可以讀取表中內容(存放的不一致),查看是否是隨機顯示的。

打開.env文件進行編輯

說明:

2、編輯database.php

找到deploy設置為1分布式部署,下邊不要改,都是讀,寫入的也就是後端的我們單獨建站連接主庫。

配置完成,tp6使用的是mt_rand取隨機數判斷使用哪個資料庫。

3、資料庫交互寫操作

比如瀏覽量沒必要每次都去更新資料庫,可以先使用redis緩存,存夠1000的整數倍,再去更新資料庫。

4、後台獨立,也就是寫

可以前後端分離,單獨做一個網站(沒有前端)使用ip訪問或者獨立的域名連接後台。

5、上傳附件(jquery ajax跨域上傳)

使用了nginx負載均衡,肯定是多個一樣的網站,如果圖片存放到一個站,別的就不能訪問了,可以單獨設置一個附件(壓縮包,圖片等)伺服器,可以使用二級域名連接,這就要求我們上傳附件的時候,是上傳到附件伺服器。

jqueryURL

API控制器apdpic方法

說明:

也可以先傳到後台伺服器然後使用(php)ftp上傳,或者是通過curl上傳到附件伺服器,感覺那樣畢竟麻煩,直接設置跨域會比較簡單。

也測試了使用jsonp跨域,但是不能上傳附件。

6、thinkphp6實現讀寫分離(在一個站點)

我個人是不喜歡這樣的,負載均衡應該是均衡地讀,也就是前台單獨一個站點,後端的寫是另一個獨立的站點,看個人喜好吧。

獨立後台的優點:可以提升安全性,因為我們的後台網址是不公開的,避免用戶猜測一些後台的信息。

.env配置按照1所述編輯,默認第一個是主庫。

database.php

願大家在新的一年心想事成,萬事如意!!!

『玖』 PHP 框架Laravel 求教我看到教程那裡說安裝好之後會有.env文件可是 我卻沒有不知咋辦!

復制.env.example到.env
我記得應該是沒有.env的。.env是環境文件,在做開發的時候,格式都會備份一個到.env.example文件,所以,你復制完,根據自己的環境做一些更改就好了

『拾』 PHP中的超級全局變數$_ENV["HOSTNAME"]怎麼輸出不了

<?php
if(isset($_ENV["HOSTNAME"])){
echo$_ENV["HOSTNAME"];
}else{
echo'沒有值';
}
?>

望採納 Thx

熱點內容
微信商城java源碼下載 發布:2024-04-20 20:27:35 瀏覽:121
用友軟體sql 發布:2024-04-20 20:10:01 瀏覽:933
python倒著循環 發布:2024-04-20 20:09:52 瀏覽:759
雲伺服器遠程電腦版 發布:2024-04-20 20:09:12 瀏覽:259
ps資料庫 發布:2024-04-20 19:52:43 瀏覽:522
dpi的演算法 發布:2024-04-20 19:41:16 瀏覽:934
成興ca鎖密碼初始密碼是什麼 發布:2024-04-20 19:24:43 瀏覽:668
如何更准確的看手機配置 發布:2024-04-20 19:15:12 瀏覽:333
匯優的演算法 發布:2024-04-20 19:10:51 瀏覽:415
和平精英暗夜危機模式密碼是什麼 發布:2024-04-20 19:10:03 瀏覽:687