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站点中, 路径末尾加不加 /, 其实是有区别的, 不可以随意, 需要小心处理, 比如对于目录链接就是如此...
821299-20161109204832311-517328526.png

管理目录栈: 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, 是一件很麻烦的事, 可能要自己 用源码进行 编译安装..

821299-20161108222815952-1220099636.png

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 等等

821299-20161109215820170-1853505300.png

821299-20161109215837874-2138428328.png


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; 
 }
}

静态方法不能访问非静态成员变量和成员函数, 这个是很显然的, 你想啊, 要引用非静态的东东,必须要一个对象实例,而静态方法调用时,是没有对象的....

注意const属性的申明格式是const PI=3.14,而不是const $PI=3.14。

转载于:https://www.cnblogs.com/bkylee/p/6044258.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值