PHP魔术常量

魔术常量(Magic constants)

PHP中的常量大部分都是不变的,但是有8个常量会随着他们所在代码位置的变化而变化,这8个常量被称为魔术常量。

    __LINE__,文件中的当前行号
    __FILE__,文件的完整路径和文件名
    __DIR__,文件所在的目录
    __FUNCTION__,函数名称
    __CLASS__,类的名称
    __TRAIT__,Trait的名字
    __METHOD__,类的方法名
    __NAMESPACE__,当前命名空间的名称

这些魔术常量常常被用于获得当前环境信息或者记录日志。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: PHP魔术常量

html5 全局属性

有几个属性之前并不熟悉,现在总结一下
其实我是无意间 看到一个关于  contenteditable 的奇淫技巧才决定把每个属性都看一下的。

(有些并不是html5才有的属性)

0.  属性规定是否可编辑元素的内容
contenteditable 奇淫技巧链接 http://blog.jobbole.com/32823

<p contenteditable="true">这是一段可编辑的段落。请试着编辑该文本。</p>

一行代码将浏览器变为一个临时编辑器:

data:text/html, <html contenteditable> (写到浏览器输入url的地方回车即可)

在这基础上大牛们是这么改造的

可编辑区域并且自动获取焦点

data:text/html, <textarea style="font-size: 1.5em; width: 100%; height: 100%; border: none; outline: none" autofocus />

编辑内容的时候背景颜色改变

data:text/html, <html><head><link href='http://fonts.googleapis.com/css?family=Open+Sans' rel='stylesheet' type='text/css'><style type="text/css"> html { font-family: "Open Sans" } * { -webkit-transition: all linear 1s; }</style><script>window.onload=function(){var e=false;var t=0;setInterval(function(){if(!e){t=Math.round(Math.max(0,t-Math.max(t/3,1)))}var n=(255-t*2).toString(16);document.body.style.backgroundColor="#ff"+n+""+n},1e3);var n=null;document.onkeydown=function(){t=Math.min(128,t+2);e=true;clearTimeout(n);n=setTimeout(function(){e=false},1500)}}</script></head><body contenteditable style="font-size:2rem;line-height:1.4;max-width:60rem;margin:0 auto;padding:4rem;">

最适合装X的来了:
实现一个php编辑器:

data:text/html, <style type="text/css">#e{position:absolute;top:0;right:0;bottom:0;left:0;}</style><div id="e"></div><script src="http://d1n0x3qji82z53.cloudfront.net/src-min-noconflict/ace.js" type="text/javascript" charset="utf-8"></script><script>var e=ace.edit("e");e.setTheme("ace/theme/monokai");e.getSession().setMode("ace/mode/php");</script>


当然不仅仅是 php 编辑器

改造成支持其他语言语法高亮的,可把 ace/mode/php 替换为:

Python -> ace/mode/python
C/C++ -> ace/mode/c_cpp
Javscript -> ace/mode/javascript
Java -> ace/mode/java
Scala -> ace/mode/scala
Markdown -> ace/mode/markdown
CoffeeScript -> ace/mode/coffee
其他……

jakeonrails 语法高亮风格用的是 monokai。
如果需要换成其他风格,,可把 ace/theme/monokai 替换为:

Eclipse -> ace/theme/eclipse
TextMate -> ace/theme/textmate
其他……

1. accesskey 访问元素的键盘快捷键

<!DOCTYPE HTML>
<html>
<body>

<a href="http://www.w3school.com.cn/" accesskey="u">W3School</a><br />
<a href="http://www.google.com/" accesskey="g">Google</a>
<br />
<label for="aa" accesskey="r">输入:</label>
<input type="text" id="aa" />
<label for="hobby" accesskey="h">爱好:</label>
<input type="checkbox" id="hobby" />
<label for="food" accesskey="y">菜系:</label>
<input type="checkbox" id="food" />
<br />

<p><b>注释:</b>请使用 Alt + <i>accessKey</i> 来访问带有快捷键的元素。</p>

</body>
</html>

 注意 以上快捷键不要和浏览器或者自定义的快捷键冲突,否则可能没有效果。

2. dir 属性规定元素内容的文本方向

<!DOCTYPE HTML>
<html>
<body>

<p dir="rtl">,,look at me..</p>
<bdo dir="rtl">dcba</bdo>
<p dir="rtl">dcba</p>
</body>
</html>

ltr      从左向右的文本方向。
rtl      从右向左的文本方向。
auto      让浏览器根据内容来判断文本方向。仅在文本方向未知时推荐使用。

3. draggable  draggable 属性规定元素是否可拖动

<!DOCTYPE HTML>
<html>
<head>
<style type="text/css">
#div1 {width:350px;height:70px;padding:10px;border:1px solid #aaaaaa;}
</style>
<script type="text/javascript">
function allowDrop(ev)
{
ev.preventDefault();
}

function drag(ev)
{
ev.dataTransfer.setData("Text",ev.target.id);
}

function drop(ev)
{
var data=ev.dataTransfer.getData("Text");
ev.target.appendChild(document.getElementById(data));
ev.preventDefault();
}
</script>
</head>
<body>

<div id="div1" ondrop="drop(event)" ondragover="allowDrop(event)"></div>
<br />
<p id="drag1" draggable="true" ondragstart="drag(event)">这是一段可移动的段落。请把该段落拖入上面的矩形。</p>

</body>
</html>

true      规定元素是可拖动的。
false      规定元素是不可拖动的。
auto      使用浏览器的默认特性。

4.  tabindex 属性规定当使用 "tab" 键进行导航时元素的顺序

<a href="http://www.w3school.com.cn/" tabindex="2">W3School</a>
<a href="http://www.google.com/" tabindex="1">Google</a>
<a href="http://www.microsoft.com/" tabindex="3">Microsoft</a>

此文章通过 python 爬虫创建,原文是自己的csdn 地址: html5 全局属性

PHP 命名空间 入门

1. PHP中的命名空间是什么?

什么是命名空间?从广义上来说,命名空间是一种封装事物的方法。在很多地方都可以见到这种抽象概念。例如,在操作系统中目录用来将相关文件分组,对于目录中的文件来说,它就扮演了命名空间的角色。具体举个例子,文件
foo.txt 可以同时在目录/home/greg 和 /home/other 中存在,但在同一个目录中不能存在两个 foo.txt 文件。另外,在目录 /home/greg 外访问 foo.txt 文件时,我们必须将目录名以及目录分隔符放在文件名之前得到 /home/greg/foo.txt。这个原理应用到程序设计领域就是命名空间的概念。
”——命名空间概述

2. PHP命名空间该如何理解?

从本质上讲,命名空间就是一个容器,这个容器内我们可以放入类、函数和变量,他们在同一命名空间内可以无条件相互访问。在命名空间之外,就必须引用或者导入其他命名空间,才能调用它们包含的这些项。

命名空间跟shell中的文件目录的概念是一样一样的。在当前目录下可以直接用文件名访问所有文件,如果需要访问其他目录下的文件,就需要输入相对路径或绝对路径。

引用方式:

namespace foo;

class Foo {
    public function foo()
    {
        return topnamespacebarBar::fuck();
    }
}

导入方式:

namespace foo;

use topnamespacebarBar;

class Foo {
    public function foo()
    {
        return Bar::fuck();
    }
}

导入就相当于将目的类复制一份到当前命名空间中。

3. PHP命名空间有何实际应用?

命名空间的存在是为了解决下面两个问题:

1. 用户编写的代码与PHP内部的类/函数/常量或第三方类/函数/常量之间的名字冲突。
2. 为很长的标识符名称(通常是为了缓解第一类问题而定义的)创建一个别名(或简短)的名称,提高源代码的可读性。

目前非常流行的 Composer 就是一个基于命名空间的包管理器/依赖管理器,同样,Laravel 能达到今天的成功,很大程度上也是因为PHP5.3的普及,生恰逢时。你可以在 https://packagist.org/ 上下载到各种
composer 包,类似于 yum、npm或者gem。

4. 一些tips

1. 同一个空间下的类直接相互直接调用,属于一家。例如 Laravel 中的 PageController 类中可以直接写 Page::all() 这样的代码来调用
Page 这个model,因为他们俩都在顶级命名空间下。

2. 若一个类存在于非顶级命名空间中,那么它只能在调用同样是当前命名空间下的其他类才不用“引用”或“导入”,它们属于一家。任何子命名空间都是另一个命名空间,另一个容器,没有除了容器之间关系之外的任何特殊关系。

3. Laravel 采用 classmap 方式进行自动加载(autoload),PHP虽然有了命名空间这个高级特性,但是这只是逻辑关系,require 文件还是要有的。这个类和文件的对应关系就存在 /vendor/composer/autoload_classmap.php
,每次 composer dump-autoload 都会重新编译、生成。

转自:http://lvwenhan.com/php/401.html

此文章通过 python 爬虫创建,原文是自己的csdn 地址: PHP 命名空间 入门

ubuntu 用户添加 添加sudo权限 组添加 杂乱概述

groupadd -g 1005 dev

添加用户组指定gid 为 1005

groupdel dev 

删除用户组dev

添加用户

adduser mike

会自动提示你 输入密码等

useradd  simael -u 600 -g 1005 -s /bin/bash

-u 指定uid (系统保留 0-499) -g 指定用户组 -s 指定使用的shell
然后 再

passwd simael 

为用户设定密码

删除用户

userdel mike

如果提示用户已经登录通过 skill 注销用户

skill -KILL -u mike

注销 mike 用户

查看所有用户和用户组:

cat /etc/passwd

cat /etc/group

为用户添加可以使用sudo命令的权限

添加sudo文件的写权限,命令是:

chmod u+w /etc/sudoers

编辑sudoers文件

vi /etc/sudoers

找到这行 root ALL=(ALL) ALL,在他下面添加xxx ALL=(ALL) ALL (这里的xxx是你的用户名)

ps:这里说下你可以sudoers添加下面四行中任意一条

youuser            ALL=(ALL)                ALL
%youuser           ALL=(ALL)                ALL
youuser            ALL=(ALL)                NOPASSWD: ALL
%youuser           ALL=(ALL)                NOPASSWD: ALL

第一行:允许用户youuser执行sudo命令(需要输入密码).
第二行:允许用户组youuser里面的用户执行sudo命令(需要输入密码).
第三行:允许用户youuser执行sudo命令,并且在执行的时候不输入密码.
第四行:允许用户组youuser里面的用户执行sudo命令,并且在执行的时候不输入密码.

4.撤销sudoers文件写权限,命令:

chmod u-w /etc/sudoers

这样普通用户就可以使用sudo了.
--------------------------------------------------------------------------------
id -u 显示当前用户的uid

id -g 显示当前用户的gid

查看用户属于那个组还可以:

查看/etc/passwd,里的内容,每行的第4项是groupID,第五项是Usr ID Info,跟组名差不多吧。用vim,grep之类的都能快速查找到指定用户所在的行。熟悉awk还可以写个脚本。

grep mike /etc/passwd|awk -F: '{ print $5}'

此文章通过 python 爬虫创建,原文是自己的csdn 地址: ubuntu 用户添加 添加sudo权限 组添加 杂乱概述

openerp 打印报表pdf中文乱码解决办法

环境 :

ubuntu 12.04

OpenErp 7.0

设置好了语言为中文简体 ,此时打印 报表,中文显示为乱码。

首先

cd /usr/share/fonts/truetype/

按照网上的方法 下载字体库:

wget http://okay.googlecode.com/files/DejaVuSans-Oblique.ttf

wget http://okay.googlecode.com/files/DejaVuSans-BoldOblique.ttf

wget http://okay.googlecode.com/files/DejaVuSans-Bold.ttf

wget http://okay.googlecode.com/files/DejaVuSans.ttf

如果你访问不了 google,可以在这里下载字体 http://download.csdn.net/detail/m0sh1/8487119

然后解压将它们放在 /user/share/fonts/trutype 目录下即可。

最后重启 openerp 登录打印报表试试是不是成功了 🙂

Windows平台下 网上的办法是:

 windows下最简单的方法是拷贝simsun.ttf文件到windows系统字体文件夹,

然后分别改名为“DejaVuSans.ttf”,“DejaVuSans-Bold.ttf”,“DejaVuSans-Oblique.ttf”,“DejaVuSans-BoldOblique.ttf”,

使用上面提供的网上下载的字体也可以。重启OE,这样,全部报表都可以正常使用中文了。

此文章通过 python 爬虫创建,原文是自己的csdn 地址: openerp 打印报表pdf中文乱码解决办法