• 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 HomeController;
    use ThinkController;
    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; 
     }
    }
    
    

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

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

  • 相关阅读:
    Redis 连接
    Redis 脚本
    Redis 事务
    Redis 发布订阅
    redis 字符串数据(string)
    Redis 键(key)
    Redis 命令
    Redis的五种数据类型
    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory 解决方案
    在命令行中运行eclipse中创建的java项目
  • 原文地址:https://www.cnblogs.com/bkylee/p/6044258.html
Copyright © 2020-2023  润新知