当前位置:首页 » 编程语言 » php容器

php容器

发布时间: 2022-07-18 04:56:00

Ⅰ docer中nginx关联php的时候说找不着php容器,请问大佬们这是哪个配置有问题

  1. 上图

  2. 提问不上图 你觉得你就能把问题描述清楚?

  3. 说再多都是浪费时间

  4. 希望可以帮助你 请采纳 谢谢

Ⅱ tomcat,php,apache都是什么关系

这么说吧
PHP是一门语言 脚本语言(你现在的网络页面其实也是PHP做的)
APACHE是一个专门执行PHP的容器 你可以想成 PHP在apache里面才能跑起来
TOMCAT是APACHE的一个“扩展” 用来支持JSP的(PHP也需要一个APACHEA扩展)
打个比方:Apache是一辆卡车,上面可以装一些东西如html等。但是不能装水,要装水必须要有容器(桶),Tomcat就是一个桶(装像Java这样的水),而这个桶也可以不放在卡车

除此之外 网站程序还有:
ASP
ASPX
HTML...
网站容器还有:
IIS
LIGHTHTTP
nginx

....

Ⅲ PHP 根据判断大容器的width,输入小容器

如果你这个宽度是按照客户端的来调整的话这个在PHP里是没法做的.你只能变通到其他的方法.
用JS动态调整每个LI的宽度可以做到.
当你的大窗口是750的时候,你可以把该容器下的class设定为li1
.li1{width:275px; margin:1px;}
.li2{width:180px;margin:1px;}
在PHP里你的LI是一直下支的.
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
JS判断出大容器的宽度后就会对LI进行自动调整,就能够自适应显示了.
思路就是这样,实现也不难.

Ⅳ 如何在docker容器里手动重启php

include <QtCore/QCoreApplication>
#include <QAxObject>
#include <Windows.h>
int main(int argc, char *argv[])
{
//OleInitialize(0);
//CoInitialize(0);
QCoreApplication a(argc, argv);
QAxObject *asdfg = new QAxObject("Excel.Application");
return a.exec();
}

Ⅳ docker 怎么启动php容器

这是最简单的架构方式,在 Docker 发展早期,Docker 被大量的滥用,比如,一个镜像内启动多服务,日志收集依旧是按照 Syslog 或者别的老方式,镜像容量非常庞大,基础镜像就能达到 80M,这和 Docker 当初提出的思想完全南辕北辙了,而 Alpine linux 发行版作为一个轻量级 Linux 环境,就非常适合作为 Docker 基础镜像,Docker 官方也推荐使用 Alpine 而不是 Debian 作为基础镜像,未来大量的现有官方镜像也将会迁移到 Alpine 上。本文所有镜像都将以 Alpine 作为基础镜像。

Ⅵ docker php 怎么这么大

步骤:
1、 在安装好php环境的容器,参考上面贴出的链接那篇文章的部分,做好基础工作:
#创建工作目录
mkdir /rootfs
#进入工作目录
cd /rootfs
#创建基础目录
mkdir -p bin etc lib proc sys tmp dev/pts usr/lib64 usr/bin usr/local/bin
#创建一个空的DNS服务用的文件
touch etc/resolv.conf
#复制名称解析文件
cp /etc/nsswitch.conf etc/nsswitch.conf
#创建用户和用户组文件
echo root:x:0:0:root:/:/bin/sh > etc/passwd
echo root:x:0: > etc/group
#创建php程序运行的用户
echo www:x:1001:1001:root:/:/bin/sh >> etc/passwd
echo www:x:1001: >> etc/group
#依赖库软链接
ln -s lib lib64
#工具软链接
ln -s bin sbin
#下载busybox,若网速慢可以用迅雷下载,然后复制到/sbin/busybox
curl -o /sbin/busybox http://busybox.net/downloads/binaries/1.21.1/busybox-x86_64
#加权限
chmod +x /sbin/busybox
#安装busybox
cp /sbin/busybox bin
busybox --install -s bin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
2、找依赖,假设我的php安装在/usr/local/php中,用交互模式进入容器
运行命令查看依赖:
ldd /usr/local/php/sbin/php-fpm
1
1
会列出一大堆依赖库,并且这些库在不同的路径。由于用到busybox,那就将这些库复制到工作目录的根目录的lib即可。即/rootfs/lib/中,用这个工具找出来的是不完整的、还有c++运行库等等。
我整理出来的完整依赖库是:
ld-linux-x86-64.so.2
libbz2.so.1
libc.so.6
libcom_err.so.2
libcrypt.so.1
libcrypto.so.10
libcurl.so.4
libdl.so.2
libfreebl3.so
libfreetype.so.6
libgcc_s.so.1
libgssapi_krb5.so.2
libiconv.so.2
libidn.so.11
libjpeg.so.62
libk5crypto.so.3
libkeyutils.so.1
libkrb5.so.3
libkrb5support.so.0
liblber-2.4.so.2
libldap-2.4.so.2
liblzma.so.5
libm.so.6
libmcrypt.so.4
libnsl.so.1
libnspr4.so
libnss_files.so.2
libnss3.so
libnssutil3.so
libpcre.so.1
libplc4.so
libplds4.so
libpng15.so.15
libpthread.so.0
libresolv.so.2
librt.so.1
libsasl2.so.3
libselinux.so.1
libsmime3.so
libssh2.so.1
libssl.so.10
libssl3.so
libstdc++.so.6
libxml2.so.2
libz.so.1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
当然根据你php安装的扩展而定,但是有些决不能缺少,
复制到rootfs/lib/
3、复制php程序
#复制PHP程序
cp -R /usr/local/php /rootfs/usr/local/php
#复制启动脚本
cp /etc/init.d/php-fpm /rootfs/php-fp
将 /usr/local/php/php-fpm.conf 改为以下配置,守护进程方式运行改为no,不然 到时候只能用交互模式 docker run -it 那种。
[global]
pid = /usr/local/php/var/run/php-fpm.pid
error_log = /usr/local/php/var/log/php-fpm.log
log_level = notice
daemonize = no #这里重要
[www]
listen = 0.0.0.0:9000 #这里也重要
listen.backlog = -1
#listen.allowed_clients = any
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow.log
4、打包tar文件
tar cf /rootfs.tar .
5、按ctrl+p+q使php容器后台运行,找个地方创建工作目录,并且写DockerFile。
#将rootfs.tar 复制出来,其实这个已经是一个基于busybox+php创建的小型系统了
docker cp technofiend/php:/rootfs.tar .
写DockerFile
FROM scratch
MAINTAINER Technofiend <[email protected]>
ADD rootfs.tar /
WORKDIR /home
EXPOSE 9000
ENTRYPOINT ["/php-fpm", "start"]
然后build系统
docker build -t technofiend/miniphp .
这里写图片描述
再看看体积,瘦了很多。比还没用过的centos系统还要少。
要是导出来再压缩的话,就只有50M左右,真是快速部署必不可少的玩意啊!
注意:体积少的镜像虽然可以减少了网络传输的时间,达到快速部署的目的,但体积少的容器某些功能例如busybox提供的,可能没有完整版的性能好。所以,还是看实际用途吧!
别忘了,要定期进行安全升级,不然很可能就会有安全隐患。

Ⅶ PHP开发指南如何实现理解依赖注入容器

。我认为有一部分原因是由于大多数介绍依赖注入的例子缺乏实际意义,让人难理解。因为PHP主要用于Web开发,那就先来看一个简单的web开发实例。
HTTP本身是一个无状态的连接协议,为了支持客户在发起WEB请求时应用程序能存储用户信息,我们就需要通过一种技术来实现存储状态交互。理所当然最简单的是使用cookie,更好的方式是PHP内置的Session机制。
$_SESSION['language'] = 'fr';
1
上面代码将用户语言存储在了名为language的Session变量中,因此在该用户随后的请求中,可以通过全局数组$_SESSION来获取language:
$user_language = $_SESSION['language'];
1
依赖注入主要用于面向对像开发,现在让我们假设我们有一个SessionStorage类,该类封装了PHP Session机制:
class SessionStorage
{
function __construct($cookieName = 'PHP_SESS_ID')
{
session_name($cookieName);
session_start();
}
function set($key, $value)
{
$_SESSION[$key] = $value;
}
function get($key)
{
return $_SESSION[$key];
}
// ...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
同时还有一个User类提供了更高级的封装:
class User
{
protected $storage;
function __construct()
{
$this->storage = new SessionStorage();
}
function setLanguage($language)
{
$this->storage->set('language', $language);
}
function getLanguage()
{
return $this->storage->get('language');
}
// ...
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
代码很简单,同样使用User类也很简单:
$user = new User();
$user->setLanguage('fr');
$user_language = $user->getLanguage();
1
2
3
一切都很美好,除非你的程序需要更好的扩展性。假设现在你想要更改保存session_id的COOKIE键值,以下有一些可供选择的方法:
User类中创建SessionStorage实例时,在SessionStorage构造方法中使用字符串’SESSION_ID’硬编码:
class User
{
function __construct()
{
$this->storage = new SessionStorage('SESSION_ID');
}
// ...
}
1
2
3
4
5
6
7
8
在User类外部设置一个常量(名为STORAGE_SESSION_NAME)
class User
{
function __construct()
{
$this->storage = new SessionStorage(STORAGE_SESSION_NAME);
}
// ...
}
define('STORAGE_SESSION_NAME', 'SESSION_ID');
1
2
3
4
5
6
7
8
9
10
通过User类构造函数中的参数传递Session name
class User
{
function __construct($sessionName)
{
$this->storage = new SessionStorage($sessionName);
}
// ...
}
$user = new User('SESSION_ID');
1
2
3
4
5
6
7
8
9
10
11
还是通过User类构造函数中的参数传递Session name,不过这次参数采用数组的方式
class User
{
function __construct($storageOptions)
{
$this->storage = new SessionStorage($storageOptions['session_name']);
}
// ...
}
$user = new User(array('session_name' => 'SESSION_ID'));
1
2
3
4
5
6
7
8
9
10
上面的方式都很糟糕。
在user类中硬编码设置session name的做法没有真正解决问题,如果以后你还需要更改保存session_id的COOKIE键值,你不得不再一次修改user类(User类不应该关心COOKIE键值)。
使用常量的方式同样很糟,造成User类依赖于一个常量设置。
通过User类构造函数的参数或数组来传递session name相对来说好一些,不过也不完美,这样做干扰了User类构造函数的参数,因为如何存储Session并不是User类需要关心的,User类不应该和它们扯上关联。
另外,还有一个问题不太好解决:我们如何改变SessionStorage类。这种应用场景很多,比如你要用一个Session模拟类来做测试,或者你要将Session存储在数据库或者内存中。目前这种实现方式,在不改变User类的情况下,很难做到这点。
现在,让我们来使用依赖注入。回忆一下,之前我们是在User类内部创建SessionStorage对像的,现在我们修改一下,让SessionStorage对像通过User类的构造函数传递进去。
class User
{
function __construct($storage)
{
$this->storage = $storage;
}
// ...
}
1
2
3
4
5
6
7
8
9
这就是依赖注入最经典的案例,没有之一。现在使用User类有一些小小的改变,首先你需要创建SessionStorage对像。
$storage = new SessionStorage('SESSION_ID');
$user = new User($storage);
1
2
现在,配置session存储对像很简单了,同样如果改变session存储对像也很简单,所有这一切并不需要去更新User类,降低了业务类之间的耦合。
Pico Container 的网站上是这样描述依赖注入:
依赖注入是通过类的构造函数、方法、或者直接写入的方式,将所依赖的组件传递给类的方式。
所以依赖注入并不只限于通过构造函数注入。下面来看看几种注入方式:
构造函数注入
class User
{
function __construct($storage)
{
$this->storage = $storage;
}
// ...
}
1
2
3
4
5
6
7
8
9
setter方法注入
class User
{
function setSessionStorage($storage)
{
$this->storage = $storage;
}
// ...
}
1
2
3
4
5
6
7
8
9
属性直接注入
class User
{
public $sessionStorage;
}
$user->sessionStorage = $storage;
1
2
3
4
5
6
根据经验,一般通过构造函数注入的是强依赖关系的组件,setter方式用来注入可选的依赖组件。
现在,大多数流行的PHP框架都采用了依赖注入的模式实现业务组件间的高内聚低耦合。
// symfony: 构造函数注入的例子
$dispatcher = new sfEventDispatcher();
$storage = new sfMySQLSessionStorage(array('database' => 'session', 'db_table' => 'session'));
$user = new sfUser($dispatcher, $storage, array('default_culture' => 'en'));
// Zend Framework: setter方式注入的例子
$transport = new Zend_Mail_Transport_Smtp('smtp.gmail.com', array(
'auth' => 'login',
'username' => 'foo',
'password' => 'bar',
'ssl' => 'ssl',
'port' => 465,
));
$mailer = new Zend_Mail();
$mailer->setDefaultTransport($transport);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
如果对依赖注入有兴趣,强烈推荐你看《Martin Fowler introction》或者着名的《Jeff More presentation》
这就是本章的全部内容,希望对大家在理解依赖注入上有所帮助。在该系列后面的内容中,我们将讨论依赖注入的容器实现。

热点内容
sql表添加记录 发布:2025-02-01 11:22:08 浏览:864
word编辑加密 发布:2025-02-01 11:18:53 浏览:571
php变量文本 发布:2025-02-01 11:10:46 浏览:426
音悦台上传mv 发布:2025-02-01 11:05:02 浏览:516
微信如何设置访问限制 发布:2025-02-01 10:43:06 浏览:335
b站缓存视频下架还有吗 发布:2025-02-01 10:37:52 浏览:940
e卡通初始密码是多少 发布:2025-02-01 10:31:55 浏览:127
phppost上传文件 发布:2025-02-01 10:26:42 浏览:105
服务器不能写入ip地址 发布:2025-02-01 10:18:56 浏览:129
青骄如何重置账号密码 发布:2025-02-01 09:57:51 浏览:520