class A {
public function test() { var_dump($this); }
}
// 注意:没有从类 A 进行扩展
class B {
public function callNonStaticMethodOfA() { A::test(); }
}
(new B)->callNonStaticMethodOfA();
// 废弃:非静态方法 A::test() 不应该被静态调用
// 提示:未定义的变量 $this
NULL
注意,这仅出现在来自不兼容上下文的调用上。如果类 B 扩展自类 A ,调用会被允许,没有任何提示。
不能使用下列类名、接口名和特殊名(大小写敏感):
bool
int
float
string
null
false
true
这用于 class/interface/trait 声明、 class_alias() 和 use 语句中。
alert('XSS Attack')";
// Create a safehtml object.
$safehtml = new safehtml();
// Parse and sanitize the data.
$safe_data = $safehtml->parse($data);
// Display result.
echo 'The sanitized data is ' . $safe_data;
?>
Sandboxing is focused on just security with code isolation. Containers have some security code isolation, but this is not the only or primary purpose. One way to think about containers is as a layered/quarantined filesystem which makes it quick/easy/lightweight to run an application and also makes the application (in the container) very portable.
Windows Docker的分层文件系统,我是将其理解为类似符号链接(仅仅用来帮助理解,不要真的轻信),当顶层的沙盒层打开文件时, 相当于打开一个符号链接,而尝试修改时,则COW(Copy on write)。到底采用什么底层文件系统技术,如何实现多个容器并发访问只 读Layer文件的性能,如何cache等,目前一概不知道。sorry!
从这里可以看出Windows Docker不同版本和linux之间的异同点。其中Hyper-V Container的安全能力高于Windows Server Container。
Windows Server Container和Hyper-V Container之间的差异,可以参考这个图片。最大的差别在于,hyper-v container支持多租户安全能力,同时支持加域。而Windows server container则不能加域,这意味着如果这个应用需要加域的话,则无法用Windows Server Container。
Q& A
问: 从前部分看讲解的来看,个人觉得Windows Server Docker主要用到的是Dandbox沙盒技术,对吗?
答:应该说和Linux Docker一样,既有沙盒技术,又有分层文件系统。
问: Windows也有在容器里面使用的Image了吗?下载下来之后在liunx的Dockr里面能用起来吗?linux的Image在Windows Server Docker里面能跑起来吗?
def get_playlistid():
player = xbmc.Player.GetActivePlayers()
if len(player['result']) > 0:
playlist_data = xbmc.Player.GetProperties({"playerid":0, "properties":["playlistid"]})
if len(playlist_data['result']) > 0 and "playlistid" in playlist_data['result'].keys():
return playlist_data['result']['playlistid']
return -1
% if playlist is not None:
% position = offset
% for song in playlist:
{{song['title']}}
% if song['type'] == 'unknown':
Radio
% else:
{{song['artist'][0]}}
% end
% if position != offset:
remove
% else:
skip
% end
% position += 1
% end
可以看到,模版大部分是用 HTML 写的,只有一小部分用来控制输出的其他代码。用两个大括号括起来的变量是输出位置(像我们在第一个 ‘hello world’ 例子里看到的)。你也可以嵌入以百分号开头的 Python 代码。因为没有缩进,你需要用一个 % end 来结束当前的代码块(就像循环或 if 语句)。
Linux 上面玩 QQ 一直都是一个问题。Wine 算是一个解决方案,但是也有不少人失败了。由于 QQ 的特殊性,采取了一系列的保护措施,导致 QQ 这个 Windows 程序非常复杂,因此 Wine 在运行 QQ 时表现差强人意。本文将要安装的是 QQ6.3 ,更高的版本除非对 QQ 做出修改,否则很难安装成功,即使成功了,问题也挺多的(笔者已试验过 QQ7.4 安装)。写这个的目的主要是方便有人遇到问题截图提问,毕竟 Linux 的普及工作还得靠大家,对于日常聊天还是建议使用手机QQ 。
本文环境
Arch Linux (其他发行版仅供参考)
KDE4 & LXDE & GNOME (其它请自测)
准备工具
Wine
winetricks
简介
Wine 是一个在类 Unix 系统中运行 Microsoft Windows 程序的软件, Wine 的全称是 Wine Is Not Emulator 意为 Wine 不是一个模拟器,它通过 API 转换技术做出 Linux 上对应于 Windows 的函数,从而调用 DLL 运行 Windows 程序。
SELECT DISTINCT
CONCAT('SELECT ',ndxcollist,' FROM ',db,'.',tb,
' ORDER BY ',ndxcollist,';') SelectQueryToLoadCache
FROM
(
SELECT
engine,table_schema db,table_name tb,
index_name,GROUP_CONCAT(column_name ORDER BY seq_in_index) ndxcollist
FROM
(
SELECT
B.engine,A.table_schema,A.table_name,
A.index_name,A.column_name,A.seq_in_index
FROM
information_schema.statistics A INNER JOIN
(
SELECT engine,table_schema,table_name
FROM information_schema.tables WHERE
engine='InnoDB'
) B USING (table_schema,table_name)
WHERE B.table_schema NOT IN ('information_schema','mysql')
ORDER BY table_schema,table_name,index_name,seq_in_index
) A
GROUP BY table_schema,table_name,index_name
) AA
ORDER BY db,tb
;
2. 执行
mysql -uroot -AN < /root/MakeSelectQueriesToLoad.sql > /root/SelectQueriesToLoad.sql
3. 每次重启数据库,或者整库备份前需要预热的时候执行:
mysql -uroot < /root/SelectQueriesToLoad.sql > /dev/null 2>&1
2.3 不要让数据存到 SWAP 中
如果是专用 MYSQL 服务器,可以禁用 SWAP,如果是共享服务器,确定 innodb_buffer_pool_size 足够大。或者使用固定的内存空间做缓存,使用 memlock 指令。
CREATE TABLE mydb.mytablenew LIKE mydb.mytable;
INSERT INTO mydb.mytablenew SELECT * FROM mydb.mytable;
ALTER TABLE mydb.mytable RENAME mydb.mytablezap;
ALTER TABLE mydb.mytablenew RENAME mydb.mytable;
DROP TABLE mydb.mytablezap;
在这个快节奏的时代。能够使用最快速度最低代价完成任务具有非常重要的意义,对于现代开发者来说,Linux是生活中必不可少且不可替代的工具,如果我们在开发少或学习中少一些遇到环境的坑,会节省很多时间,潜伏在各种Linux群中数年,发现大家都有手贱(操作失误,笑),因此在本文中给出终极解决方案: 直接使用Ubuntu Live CD 来完成系统的启动。
那么最快的Linux安装办法又是什么呢?其实经过严谨的思考之后我个人觉得是不安装。我们可以准备从grub启动ubuntu操作系统把系统放到内存中,再预制出各种情况的环境包,也就是环境模块化,因为系统是在整个内存中所以速度非常非常快,需要模块化的内容并不多,比如说ssh vim tmux 为一组工具,开机后一个命令就可以激活工具包,不到几秒钟的时间即可完成,其他的如Chrome浏览器一类的都可以快速完成在内存上的安装。通过这种方式让环境更加灵活更加快速准备好开发环境。
Ubuntu 是一个基于 Debian 的 GNU/Linux 操作系统,支持 X86 、64以及 PPC 架构。Ubuntu 每隔六个月发布一个版本,即每年的四月和十月,本文使用的是 15.04 64-bit 版本。Ubuntu 对于新手应该是比较友好的一个 Linux 发行版,中文本地化也做的不错,有开箱即用的感觉。因为 Ubuntu 近几年用户群的增加,多了很多对于新手有用的资料,因此不用担心遇到问题无法解决,善用搜索和提问,将使你更快速地成长。
Fedora 简介
Fedora 是一个由 Fedora 社区开发的 Linux 发行版,由 Red Hat 公司赞助。可以将 Fedora 看成是 Red Hat Linux 个人使用的代替,由于有 Red Hat 公司的支持,Fedora 的功能非常完善,还分为 WORKSTATION 、SERVER 和 CLOUD 版本。本文使用的是 Fedora 22 WORKSTATION (工作站),Fedora 22 已经将包管理器从 YUM 改为 DNF ,因此建议学习者直接学习 DNF 。
下一步将创建虚拟硬盘,如图所示,默认位置为 C 盘,如果你不想在 C 盘创建,请确保你选择的盘格式为NTFS
创建完成后,请点 设置 如图加载 ISO 文件
2.安装 Ubuntu
点击启动 ,会开机,进入如下界面
这里请注意,如果你与笔者一样使用虚拟机,强烈建议选择 清除整个磁盘并安装 Ubuntu ,但如果你要装到实体机与 Windows 形成双系统时,请选择 其他选项 ,但这要求你对 Linxu 有一定的了解且具备一定的基础进行分区操作,注意不要覆盖 Windows 的 C 盘,此处由于篇幅原因,不再详述。