Posts tagged with web技术


上一篇文章里提到是用PHP扩展实现获取变量的变量名的方法. 今天发现有一个PHP实现的版本 . 实现方法来自:http://mach13.com/how-to-get-a-variable-name-as-a-string-in-php 刚开始以为这个方法好使, 仔细想想其实也是有问题的. 这个解决方法是用的PHP里的get_defined_vars()方法,该方法返回当前作用域内的所有变量信息.也是和$GLOBALS一样,以变量名 => 值的方式返回. 他的代码很简单: ` $v) $aDefinedVars_0[$k] = $v; $iVarSave = $iVar; $iVar =!$iVar; // 将当前变量的值取反 $aDiffKeys = array_keys (array_diff_assoc…

如果你比较好奇,可以先从这里下载所有代码,也可以点击这里查看chrome下上传的demo,点这里查看firefox下的demo 前不久Gmail推出了支持拖拽的附件上传功能,试用了下还真不错,其实很久以前就在想能有直接拖拽附件的功能,多亏有了HTML5,Web应用越来越像客户端的应用了。 在好奇心驱使下,想了解一下Gmail到底是怎么做到的,了解了一下最新的HTML5 File API草案,这个接口主要提供的就是提供对文件对象的访问,别想歪了,这个接口是无法随意的访问系统里的文件的。他能做的就是访问标签里所选择的文件,这些文件可以通过用户手动选择,或者是HTML5的拖放接口选中的文件。有兴趣的童鞋可以看看这个规范,还算比较简单。 下面简单看看接口定义几个对象。 FileList、File对象。 在HTML5中的标签中增加了mutilple属性,允许进行多文件选择。大家应该都知道一般上传标签中是不允许选择多个文件的。 新增的这个属性就是允许进行多个文件的选择(这个在桌面应用中也很常见)。 下面是在Firebug中的输出 ` var f = document.getElementById…

之前在当当的时候的一个项目中用到了一个简单的模板引擎,其实也是借鉴discuz来做的模板引擎,很简单,它所作的事情就是把一些自定义的标签编译成php代码。已经说了很简单了,所以编译的时候也名优进行模板语法的检查,那么在开发过程中就会出现编译出来的php文件有语法问题,有语法问题没有关系,我修改重新编译一下就好了。首先不能在每次请求的时候都把php模板重新编译一下,会严重影响性能,折中的处理时在每个编译好的php文件末尾检查一下该模板文件是否已经修改过,根据设定的更新频率,如果又需要则重新编译模板文件,现在的问题是编译出来的php文件自己有语法错误,根本执行不到模板检查那一步,所以即使修改了模板文件中的问题也不会重新编译。 所以我想寻找一种简单的方法来检查生成的php文件是否合法。不合法就重新编译,这样开发过程中就不用出现错误就得手动删除缓存文件了。 在网上找了一下。刚开始以为 tokengetall()函数能处理语法错误的问题,结果发现,它只是做简单的词法分析。没有办法。后来到论坛上去问了一下 http://groups.google.com/group/professional-php/browse…

一直没有仔细研究过在线HTML编辑器,以前以为编辑功能很复杂,需要用大量的JavaScript来模拟编辑器的效果,以前都是使用一些开源的HTML编辑器,HTML在各网上随处可见,发表文章,评论。最近自己想做一个类似Things这样的Web版的应用,需要一个想Google  Notebook(可惜的是现在已经停止开发了) 那样的编辑功能,看看现在网上的这些编辑器都庞大了,都是一些自己根本用不到的功能,其实我的需求很简单:简单的编辑既可以,并且需要轻量级一些,因为页面上可能需要开很多个编辑器实例。 所有想自己也来研究一下,看看能不能自己开发一个。 几天前花了一个晚上用firebug看了下Google Docs是怎么做。第一个遇到的问题就是如何让光标停在鼠标点击所在得地方。我刚开始一味都是js模拟出来的,这得有多复杂啊。并且还要兼容各个浏览器,天啊!后来上网一搜发现,浏览器早就想到了我们会有这样的一个需求。其实很简单,两条语句就可以说明HTML编辑器的最为核心的部分: document.designMode = 'On'; document…

前一篇文章我们研究了include调用返回值的问题,并指出可以通过这种方式来完成序列化相同的功能,现在我就来研究一下这种方法的可行性和效率,因为直接的返回php值肯定是比unserialize()函数要快。 第一步我们来研究下怎么将php对象持久化的保存起来。下面是我定义的一些变量: private $_var; public $pub = array('pub value', 3, 4); public function __constructor($var) { $this->_var = $var; } `public function show() { echo $this->_var; } } $string = "It's a string..."; $array…

注意:可能存在偏差,我还没有做实验确认性能的差异,待更新 以前乱翻symfony生成的缓存文件的时候看到很多类似: "value"); ?> 这种表达式,当时并没有怎么在意,今天研究symfony代码的时候看到这样一句代码 classes = include($file); ?>; 一直都是通过include require来包含文件,但是从来没有使用过他的返回值,印象中include返回的无非是true或者false吧。今天自己看了下文档,发现在php文件中是可以直接调用return的。比如: ` // return.php // get_return.php echo $value; // 输出 Array, 因为$value 是从return.php返回的一个数组 ?> ` 其实项目中很少情况需要这样的返回方法…

在项目中经常要调试程序,但是电脑上的ZendStudio总是没配置好,不能单步调试,不过有时候不一定需要让ZendStudio来帮我们调试,所以写了下面这个辅助函数来方便调试,因为有时候调试的位置加多了自己也不知道到底是加在什么地方了,下面的函数就是方便的dump对象信息,同时显示调试的问题和所在的行数。 <?php //调试函数,方便显示调试函数的位置和文件 function p(){ $args = func_get_args(); // 调用栈,debug_backtrace()可以返回调用栈。这样 我们就可以方便的知道函数在哪里调用的。 $backtrace = debug_backtrace(); $file = $backtrace[0]['file']; $line = $backtrace[0]['line'…