php学习时的小心得

Warning:  session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at

网上查原因是:UTF-8 无bom格式的时候,转换为utf8 前面会多出个字符,所以造成了提前的输出。

解决方法是:1、 在Linux下打开,去掉后再保存
      2、 用写字板打开,把光标放到最前后回车,然后再敲删除,重新回到第一行,这样最前面的那个字符就会去掉
      3、 使用UltraEdit编辑器,打开高级----配置----Unicode/utf-8 检测,把自动检测UTF-8文件,自动检测没有BOM的Unicode文件等前面的勾全去掉,然后你再打开那                               个文件,就会发觉“锘 ”这个字符出现了,删除就OK了。
但我三种方法都试了下没有发现这个多余的字符,只好在第一行最前面加了ob_start();

当然也可以修改php.ini中的session.auto_start = 0 为 session.auto_start = 1,这样就省略了手工启动session。

 

补充:ob_start();此函数将打开输出缓冲。当输出缓冲是活跃的时候,没有输出能从脚本送出(除http标头外),相反输出的内容被存储在内部缓冲区中。 

   内部缓冲区的内容可以用 ob_get_contents() 函数复制到一个字符串变量中。想要输出存储在内部缓冲区中的内容,可以使用 ob_end_flush() 函数。另外, 使用ob_end_clean() 函数会静默丢弃掉缓冲区的内容。 

   输出缓冲区是可堆叠的,这即意谓着,当有一个ob_start() 是活跃的时, 你可以调用另一个 ob_start() 。只要确保又正确调用了 ob_end_flush() 恰当的次数即可。   如果有多重输出回调函数是活跃的,输出内容会一直按嵌套的顺序依次通过它们而被过滤。 

 

关于php中include和require

      当页面执行到require()时,如果require是一个PHP、HTML页面的话,这时就会马上转到去执行该页面了。而include,一般是用于include进来一些inc文件。比如说可以将你的网站的页头和页眉作为一个inc文件,这样在每个PHP文件里面再include进来。include实际只是将你要include的文件嵌入到当前页面当中。而require则是马上去执行你所请求的页面。

      incluce在用到时加载                                                   require在一开始就加载
  _once后缀表示已加载的不加载
  php系统在加载php程序时有一个伪编译过程,可使程序运行速度加快。但incluce的文档仍为解释执行
  include的文件中出错了,主程序继续往下执行                    require的文件出错了,主程序也停了
  所以包含的文件出错对系统影响不大的话(如界面文件)就用include,否则用require

      require()函数更多地用在静态元素中,而include()更多地用于动态元素中。

 关于PHP IDE的推荐

edit plus 做很小,很快捷的改动
dreamweaver 做界面处理
Zend Studio php coding

 

<a href="javascript:void(0)" onclick= 

注意这里的,若是href="#".这种形式会整体刷新页面,href="javascript:void(0)"则不会。后者在Ajax页面中用的较多

 

关于去掉CI里包含在URL中的index.php

其实很简单,三部搞定。

1、打开apache的配置文件conf/httpd.conf,找到里面的LoadModule rewrite_module modules/mod_rewrite.so,把该行前的#去掉。接着找到

    # AllowOverride controls what directives may be placed in .htaccess files.

    # It can be "All", "None", or any combination of the keywords:

    #   Options FileInfo AuthConfig Limit

    #

    AllowOverride None

  把AllowOverride None改为AllowOverride All

 2、在CI的根目录下,即在index.php,system的同级目录下,建立文件名为 .htaccess 的文件,内容如下

RewriteEngine on

RewriteCond $1 !^(index\.php|images|robots\.txt)

RewriteRule ^(.*)$ /index.php/$1 [L]

  注意: 最后一行的/index.php/ 要根据你目录的实际情况来定,比如网站根目录是 /ci/index.php 则要写成 /ci/index.php/

      其中,RewriteCond $1 !^(index\.php|images|robots\.txt) 上面的代码意思是排除某些目录或文件,使得这些目录不会 rewrite 到 index.php 上,这一般用在图片、js、css 等外部资源上。也就是说非 PHP 代码都要排除出去。比如这里排除了 images 目录和 robots.txt 文件,当然 index.php 也应该被排除。

3、将CI中配置文件(/application/config/config.php)中 $config['index_page'] = 'index.php'  改为 $config['index_page'] = '',就是设为空。

这样就配置完成了,重启apache试一下吧。

  我本人在实验这个时屡试屡错,按照这上面没有任何问题,在多次看网页的建议时,看到一条说,他为保险把conf中能搜到的三处 AllowOverride None 全都替换成了 AllowOverride All,我一搜发现我搜到了四处,就全改了,然后打开网页直接403了。仔细一看,文件末尾有一段很早前我自己配置的这样一段代码

Alias /workspace "D:/php"

<Directory "D:/php">

Options Indexes MultiViews

AllowOverride None

Order allow,deny

Allow from all

</Directory>

  这是eclipse的DEBUG环境配置用的,这里的None若改为All,就会403,不改,index.php还是出不了效果。由于现在也不是用eclipse开发了,便删了去。于是就成功了。。。具体上面原因我也不知道,反正就是OK了。还有刚才提到需不需要修改三处的AllowOverride None,其实不用,只要修改第二处就可以了。

 

 

jquery 如何得到table得到鼠标所在 行号 列号

$(document).ready(function(){

		$(".mytable td").click(function(){

			var tdSeq = $(this).parent().find("td").index($(this)[0]);

			var trSeq = $(this).parent().parent().find("tr").index($(this).parent()[0]);



			alert("第" + (trSeq + 1) + "行,第" + (tdSeq + 1) + "列");

		});

	})

  

你可能感兴趣的:(PHP)