ThinkPHP真正疑难问题笔记
如何选择线程安全版本还是非线程安全版本: http://www.cnblogs.com/Alight/p/3389113.html(看webserver处理请求时, 使用的是多线程的方式还是 多进程的方式), 当php使用fastcgi的方式运行时, 采用的是单线程的方式, 因此应该选择nts-php, 如果采用isapi的方式, 就使用ts-php, 很多php的模块都是 线程不安全的.. 通常apache服务器 使用的是isapi是 ts模式.
写php的类, 实际上, 也就是把 php看作是 oop的语言, 而那正是我所喜欢和熟悉的, 如以前使用c++, 虽然以前php写的可能是用oop的思想,但是并没有支持oop的语言features, 不过php的oop语法跟java更接近
一个很重要的常识: 在编程语言中, 只有函数中的 字符串 类型, 才用 引号, 而语言中的 所有的 "关键字" 等 都不 使用 引号.
事实上, 感觉 tp 各个版本的 结构虽然 "内核" 没变,但是 各版本之间的目录结构, 术语的叫法其实 是很 混乱的, 如:项目, 模块, 分组, 控制器等术语都是很迷惑的,所以, 自己来用的话, 还是要牢固的 掌握一个版本, 固定一个版本(选择v3.2.3) 为好, 要想每个版本都去整的话, 是会迷惑的.
<?php
namespace Home\Controller;
use Think\Controller;
class IndexController extends Controller {
public function index(){
如果没有定义默认的页面, localhost将显示: /usr/share/httpd/noindex/index.html页面
在httpd.conf文件中, 如果要表示, 只有开启了某个模块后, 才能配置生效的设置: 使用 <IfModule alias_module> Alias /SPhoto /root/SPhoto </IfModule>
在httpd.conf的220行...
什么叫Alias: 本来httpd服务器访问文件是有默认的地址的, 那就是 DocumentRoot "/var/www/html", 但是假设你把web内容没有放在 DocumentRoot目录下或其子目录下, 但是你要httpd server又能够去访问到, 比如通过 地址 http://localhost/SPhoto, 如果没有作Alias, 那么这个SPhoto目录应该表示是 /var/www/html/目录下的一个子目录, 而实际上, 它是在/root/SPhoto, 所以要 实现这个 别名: /SPhoto -> /root/SPhoto, 就要对httpd.conf进行设置, 告诉apache这个别名, 让它... (Alias: Maps webpaths into filesystem paths and is used to access content that does not live under the DocumentRoot. [content作为内容讲时是不可数名词,而作为目录讲时当然是可数名词了,此时需要在后边加S] )
在http.conf配置中的 目录结尾都不要跟 / ,because:
If you include a trailing / on /webpath, then the server will require it (/) to be present in URL.
包括http.conf文件中所有的配置命令格式: 命令指令(首字母大写的驼峰表示法单词 + 空格 + 命令值(字符串用双引号)
就不是很清楚, ls -C 是按列显示, 而按行显示就是 -x...
目录 节(section) 选项属性格式:
<Directory "/root/SPhoto"> 注意, 下面所有的设置, 都是 针对 这个目录而设置的, 是对目录! 不是 针对哪一个文件的!!!
属性名称 属性值
Options (+-)Indexes // Options是复数,针对目录, 是否在没有index...文件的时候, 显示索引即显示目录结构, index这里是动词...
(+-)FollowSymLinks // 类似于IfModule alias_module中的Redirect: 即允许 假设在访问/webroot/ftp的时候, 这个ftp实际上是一个链接, 比如链接到/var/www/uploads/去, 即在访问http://www.example.com/ftp的时候, 实际显示的并 不是/webroot/ftp目录的内容, 而是...uploads的内容. **建议设置这个选项, 服务器特性, 避免apache去 执行 系统调用 stat, 去检查目录是不是一个链接, 这样有助于提供网站性能...** 参考:https://www.yuzhenhai.com/view/201212/7609.html
(+-)MultiViews: 表示, 当访问某个子目录 如: foo 时, 如果没有这个子目录, 但是有 几个类似的文件, 如: foo.html, foo.png, ...这时候, apache会根据具体的情况, 决定使用 foo.html 或 foo.png. multiviews, 就是表示多视图, 不同的视图, 根据情况采用不同的 文件显示...
AllowOverride None/ All, 表示是否允许重载, 意思是这里httpd.conf文件中设置的Options选项等特性, 是否可以在 目录下的 .htaccess文件中, 重新设置, 用.htaccess中 的设置来覆盖 httpd.conf中的设置.
Order allow,deny
Allow from all
deny 1.2.3.4
// 这里是定义的客户端的访问权限, 相当于acl, 但跟acl的区别是: 实际是否生效,以及检测的顺序是以 order中, 最后规定的类型来决定的..., 所以, 如果像下面这样规定, 就达不到目的:
Order deny, allow
deny 1.2.3.4
Allow from all
// 因为order规定检测的最后顺序是 allow, 所以会检测最后的allow from all, 并以此为准!!
</Directory>
在linux系统中, 在apache站点中, 路径末尾加不加 /, 其实是有区别的, 不可以随意, 需要小心处理, 比如对于目录链接就是如此...
管理目录栈: pushd(保存历史目录), popd(删除历史目录), dirs(显示堆栈目录). pushd +N 中的+表示从左到右, -表示从右到左, N总是从0开始, 即使是0, 也要用+0, 或-0 表示, 因为有方向性: 最左边的第一个和最右边的第一个很明显是不同的.
- pushd +N 表示跳转栈中第N个路径,且将此路径压入到栈顶(从左往右,从0开始)
- pushd -N 表示跳转到第N个路径,且将次路基压入到栈顶 (从右往左,从0开始)
- pushd +1 等于 pushd
如何在linux下将cd目录压入目录堆栈 参考https://www.bing.com/search?q=options+%2Bfollowsymlinks&qs=n&form=QBRE&pq=options+%2Bfollowsymlinks&sc=0-23&sp=-1&sk=&cvid=0F96353E2A2C44F88490DCCD3C491A44
allow[2'lau] alias['eili2s] live 表示动词, 住, 居住, 也可以用来表示 "位于", 比如某个文件位于某个目录: file living under the DocumentRoot.
php的安全设置:http://www.cnblogs.com/thinksasa/archive/2013/02/28/2937644.html
php命令 本身的选项:
-a, interactive shell, 将php作为交互式的环境执行 php> 这时可以执行 php-shell攻击: php的函数 system():执行系统命令,如同shell-terminal, bash, 一样执行os命令, 很恐怖的函数.
-m, show compiled in modules
-i, show php detail information
--ini, show ini configuration info
linu下, 要安装 自己扩展php的模块,(即 phpinfo()没有列出的载入模块列表中的新模块)... module, 或 extension, 是一件很麻烦的事, 可能要自己 用源码进行 编译安装..
You don't have permission to access /sphoto on this server.
关于 "载入的模块"? 首先, 这个是针对谁说的? 这个是针对 服务器引擎, apache, httpd而说的, 是说 服务器引擎, 为了完成 网站功能, 必须采取"类似茶件的方式", --即 ""载入模块的方式" 来运作, 一方面apache要实现很多功能, 另一方面, 开发apache, 写apache的代码, 你不可能把全部功能都包含进去, 那样的话, 你一个apache的代码就很大很大了... 所以 值有apache采用 插件, 采用模块 载入的方式, 才能实现现实的需求!! 类似于ps中的滤镜, firefox的插件... 而 php就正好 只是httpd 载入的一个 模块: libphp5.so, libphp5-zts.so, 其他还有如: mod_actions.so, mod_alias.so 等等
php类对象的$this,self,和parent的使用:
总结:this是指向对象实例的一个指针,在实例化的时候来确定指向;
self是对类本身的一个引用,一般用来指向类中的静态变量;
parent是对父类的引用,一般使用parent来调用父类的构造函数。
::::::::::::;
在php中的final, 也很简单直接, 说明的就是最后的:
用final来修饰类, 表示该类不能被继承,因为是最后的嘛;
用final来修饰方法, 表示该方法不能被重写,不能被override, 因为是最后的嘛.
const和static? 其实,本来这两个关键字根本就没有关系的!
const表示这个 "量" 是一个常量, 既然是常量(包括关键字), 都不能在前面加\(, 只有变量才能用\) 符合, 也就是说, $符号表示的是 变量!!! const 常量也要用self::PI类来引用!
static是用来表示 静态的 "变量" 或成员函数, 是变量的, 所以static 要加$的: 如: private static $count=0;
<?php
class clss_a{
private static $name="static class_a";
const PI=3.14;
public $value;
public static function getName(){
return self::$name;
}
//这种写法有误,静态方法不能访问非静态属性 ,
public static function getName2(){
return self::$value;
}
public function getPI(){
return self::PI;
}
}