zoukankan      html  css  js  c++  java
  • tp APP_PATH和__APP__的区别 和读写php文件?

    APP_Path是路径常量, 它真的就是路径,目录, 可以通过它来定位到具体的文件
    而 __APP__是系统常量, 他的值是文件, 它的格式是其实是 pathinfo的格式, 比如: /index.php/Home/Index....之类的东西,

    以前没有明确的去区分它们, 其实它们是有很大差别的, 特别是 在读取/写入 文件的时候 要定位文件, 就要明确区分它们, 不能混淆.
    定位文件, 以便读写文件内容的时候, 是不能用 __APP__之类的系统变量的,你是找不到你要读写的文件的!
    要用 路径常量! 因为 你看pathinfo中的 /index.php/ 那个根本就不是目录嘛, 哪里有什么目录/路径叫index.php的? 所以 用 __APP__来定位/找读写文件是错误的, 找不到的, 要用真的路径的常量, 也就是 ..._path的常量, 比如: $file = APP_PATH.'Home/Conf/somecfg.php';

    其实, 在路径常量中, 只需要用 APP_PATH 就可以了, 其他都可以不记

    • 没有 ROOT_PATH 这个路径常量
    • APP_PATH使用的是 网站根路径的 相对路径, 即 ./APP_NAME/, 而THINK_PATH使用的是绝对路径
    • 项目的其他路径, 比如 RUNTIME_PATH, CACHE_PATH, TEMP_PATH, DATA_PATH 等都是在 APP_PATH的基础上来的. 可以不记, 而且为了便于使用, 这些路径常量都是以 斜杠 / 结尾的.

    在linux中不能写入文件的原因?

    • 其他访问者访问网页的时候 , 是使用 apache的身份来访问 网站目录中的文件的
    • 考虑两个方面, 一个是文件的读写权限, 设置文件 为apache所有, 或者 设置文件的权限为 0777
    • 另一方面, 看是不是 selinux的阻碍: 设置 /etc/selinux/config 中的selinux=disabled

    用file_put_contents(..) 写入包含php标签的内容 到配置文件时, 不需要对 php标签进行任何转义, 或进行函数处理, 比如:

    $content = "<?php return array( 'name' => 'Mike', 'address' => 'Chengdu,China' );";
    然后写入配置内容到配置文件: if(!file_put_contents($file, $content){ die('写入文件失败');}else{echo '写入文件成功');}

    • 但是要注意的是, 用echo file_get_contents('some_cfg.php')时, 输出会感觉很奇怪?
      比如:
    <?php
    return array(
        'name'=>'Mike',
        'address'=>'Chengdu, China',
    );
    

    会输出: 'Mike','address'=>'Chengdu, China',); ???
    这是 因为读取了.php的配置文件内容后,(内容真的还是上面的完整的内容), echo到网页时, 浏览器要对输出内容进行解析, 当解析到 <?php... 内容的时候, 会认为这是一个php原始混合标签, 会一直读到 这个标签结束, 结束标签就是 =>中的 '>', 也就是说, 这里的配置项的 =>中的箭头被当作 了 php标签的结束标签. 于是, 这个php标签解析完了之后, '>'后面的内容就当作 原始 文本直接输出了, 所以你看到的就只是 => 后面的内容. 前面的内容就没有了.
    当然, 这里的 php标签由于没有输出, 所以你看到没有什么内容, 反之, 如果php标签中有echo等输出内容,那么你也会同时 看到 php标签的输出内容 和后面的 直接文本内容:

    在.class.php控制器文件的方法中 , 由于是apache发起的进程, 所以 通过file_put_contents()创建的文件 的属主 就是 apache的! 可以为apache(普通浏览器浏览者) 所访问和读写! 权限刚刚够! 但是 你当前使用的用户看到的权限 则是 readonly 只读, 和vim中看到的是 [RO] 标识

    ====================================================

    创建数据表的时候, 一定要 对字段 的属性显式的设置为 not null, (不能为空!) 不要不管它! 因为字段属性默认的就是 default null, 这样一方面你可以插入一条全部为空的数据记录, 这个其实是没有意义的, 是对数据表的一种污染! 另一方面, 如果你是从 表单获取数据 来写入表的时候, 如果 获取出错, 表单出错等原因, 导致获得的数据是空的话, 你又不检查, 然后直接写入表,这个时候, 其实是 能够写入的, 而且是成功的! 然后你又不检查是否写入成功, 或用 false==, 不是全等 来检查, 那么都将会导致一些隐藏的错误, 而且有些错误是很难发现的!会把你搞得很老火. 所以, 对于从表单获取数据的表, 要求: 1是字段要显式的设置为not null 为空, 2. 一定要用 false !== 全等来检查是否写入成功

    • 在vim中, 如果某个文件是[RO] 只读文件, 那么如果文件的内容发生了变化之后, 编辑器是不会通知你的, 在原来打开的文件中, 内容也是不会有变化的, 只有你自己关闭这个文件, 然后重新打开, 才能看得到变化后的文件内容

    ============================================================

    (很重要的一点)关于mysql中的null和空值? 它们是不同的! 所以 以后 不要把 NULL 读成 空,空就是空, NULL 就是 NULL, 不是空! 两者不一样, 也不要读混淆! 参考: https://www.jb51.net/article/157913.htm

    1、我字段类型是not null,为什么我可以插入空值? 因为NULL并不是空值, 空值是'', 表示真空, 不占用表字段存储空间的; 而NULL是要占一个字节的存储空间来存储 字段是否是NULL (mysql NULL columns require addtion space to record where their values are null) 你可以把NULL 当作一个特殊的值(一种特殊的状态, 有空气但是看不见的杯子 的那种状态), 所以 '' 本来就不是NULL

    所以, 虽然你在 create table 时, 设置了某些字段 not null, 但是你从表单没有输入值, 得到的时 空值 '', 却还是能成功地插入到数据表中, 这是一个很有迷惑性的问题! 一般 表单在提交的时候, 会进行数据检查, 不允许提交为空的表单; 或者为了保险和安全起见, 在表单接收页, 你再判断一下 要插入的字段值 是否为空'', (不是NULL )

    2、为什么not null的效率比null高 , 因为 not NULL(你可以用 0, 空值'', 或一个特殊的值来表示 not null的字段), 由于 null在存储, 索引,比较等操作中, 都要比 not null类型的复杂得多, 所以 not null的效率比null要高
    3、判断字段不为空的时候,到底要用什么? 要 根据你的目的和意图, 如果判断是否为空值 要用 ...where field_name <> '', 如果要判断 是否为NULL, 则要用 is not null: where filed_name is not nullwhere field_name is NULL

  • 相关阅读:
    [转]Hibernate Session各种状态转换方法分析
    Hibernate3回顾-4-事务和并发管理
    Hibernate3回顾-3-Session管理
    Hibernate3回顾-2-相关概念
    [转]oracle for update和for update nowait的区别
    数组
    Android 调用webservice faultactor 错误
    Java "==和equals区别" 示例
    Java "==和equals区别"
    Java "double字符串转数字"
  • 原文地址:https://www.cnblogs.com/bkylee/p/13740213.html
Copyright © 2011-2022 走看看