源码

dedecms里面有两个标签还是比较灵活的,一个是{dede:php}{/dede:php}另外一个是{dede:sql}标签,{dede:php}标签注释要用来在模板中写php代码的,{dede:sql}主要是用来调用sql用的,下面就来介绍下这两个标签到底该如何使用。该文章是转自百度空间的一篇文章。{dede:sql}标签的用法sql标签可以称得上是个万能标签了,查询数据库将其输出,这里介绍一些关于这个标签的用法:1.用来输出统计内容,这个是不错的,举个例子,我们来统计下总共发了多少的文章,思路就是输出dede_addonarticle这个文章附加表内容总数就可以了。{dede:sqlsql="SELECTCOUNT(*)ASnumsFROMdede_addonarticle"}[field:name="nums"/]{/dede:sql}2.使用~field~来进行特殊的查询,比如之前论坛上面很多会员需要做一个输出当前发布文章会员的相关内容,之前用sql或者arclist标签是没办法实现的,因为每篇内容是不同的,这里我们来用5.5的sql语句来做个示范。我们首先在文章模板中相应的位置加上下面的标签{dede:sqlsql="SELECT*FROMdede_archivesWHEREwriter=~writer~"}[field:id/],{/dede:sql}这个放到article_article.htm页面,将会检索出当前会员发布的相关文章,这里的~writer~会根据当前内容的环境变量进行替换后再执行查询。这里出现在SQL语句中条件查询的~writer~,也就是$refObj->Fields[$value]这个里面的相关内容模板中使用PHP许多人希望织梦的模板标签能够更加灵活,加入可以运行PHP的功能,这里在DedeCMSV5.5中就加入了一个可以执行php的特殊标签{dede:php}{/dede:php},这个标签可以执行PHP语句了。我这里举几个常用的例子:1.最简单的输出内容:{dede:php}$numA=1;$numB=2;echo$numA+$numB;{/dede:php}在{dede:php}里想要输出信息可以直接使用print,echo之类的打印出来赋值给@me无效这个输出的内容是计算结果:32.结合SQL查询输出单条内容{dede:php}$row=$dsql->GetOne('selectid,typenamefromdede_arctypewhereid=2');print_r($row);{/dede:php}这个输出的内容是Array([id]=>2[typename]=>问答)3.获取当前页面的变量比如我们这里进入系统后台的[模板]-[全局标记测试],我们在代码中填入下面的内容:{dede:php}print_r($refObj->Fields);{/dede:php}在PHP中想要获取dede某个字段值可以使用$refObj->Fields对象来获取列入获取title=>$refObj->Fields['title']如果环境变量保持默认,即"不使用环境ID",我们会看到以下的结果:Array([typeid]=>0[phpurl]=>/plus[indexurl]=>/[templeturl]=>/templets[memberurl]=>/member[specurl]=>/special[indexname]=>主页[templetdef]=>/templets/default)那我们再换个环境变量测试看看,这里以我本地的栏目为测试了:Array([id]=>3[reid]=>0[topid]=>0[sortrank]=>1[typename]=>产品[typedir]=>{cmspath}/product……[indexname]=>主页[templetdef]=>/templets/default[position]=>主页>产品>[title]=>产品)这样一来就检索出当前页面的局部变量了,接下来我们可以来结合前面的SQL语句来实现根据不同环境ID调用内容不同栏目内容。例如:{dede:php}$thisid=$refObj->Fields['id'];$row=$dsql->GetOne('selectid,typenamefromdede_arctypewhereid='.$thisid);print_r($row);{/dede:php}这样是来调用当前栏目的标题,这个标签功能类似于{dede:field.typename/}文章写得很不错,写在这里一是方便自己查看,而是分享给和我有同样困惑的人。希望能帮助同学们。转:http://blog.csdn.net/huminghai/article/details/7680088

源码

<?php/***QRCode+LogoGeneratorQR图片中间加logo,QR是根据google开放api生成的,其实啥都没有**http://labs.nticompassinc.com*///ini_set("auto_detect_line_endings",true);$data=isset($_GET['data'])?$_GET['data']:'http://weixin.qq.com/r/8bxsY6LEqpzVh7MAn_nV';$size=isset($_GET['size'])?$_GET['size']:'200x200';$logo=isset($_GET['logo'])?$_GET['logo']:'./logo.jpg';//中间那logo图//GetQRCodeimagefromGoogleChartAPI//http://code.google.com/apis/chart/infographics/docs/qr_codes.html//https://chart.googleapis.com/chart?cht=qr&chld=H|1&chs='.$size.'&chl='.urlencode($data));$png="http://chart.googleapis.com/chart?chs=150x150&cht=qr&chl=Hello+world&chld=L|1&choe=UTF-8";$QR=imagecreatefrompng($png);//Warning:imagecreatefrompng()[function.imagecreatefrompng]:Unabletofindthewrapper"https"-didyouforgettoenableitwhenyouconfiguredPHP?=//$QR=imagecreatefrompng('./chart.png');//外面那QR图if($logo!==FALSE){$logo=imagecreatefromstring(file_get_contents($logo));$QR_width=imagesx($QR);$QR_height=imagesy($QR);$logo_width=imagesx($logo);$logo_height=imagesy($logo);//ScalelogotofitintheQRCode$logo_qr_width=$QR_width/5;$scale=$logo_width/$logo_qr_width;$logo_qr_height=$logo_height/$scale;$from_width=($QR_width-$logo_qr_width)/2;//echo$from_width;exit;imagecopyresampled($QR,$logo,$from_width,$from_width,0,0,$logo_qr_width,$logo_qr_height,$logo_width,$logo_height);}header('Content-type:image/png');imagepng($QR);imagedestroy($QR);?>转:http://www.2cto.com/kf/201212/178527.html

2013-4-2 5591 0
软件

示例一:<?php//说明:获取完整URLfunctioncurPageURL(){$pageURL='http';if($_SERVER["HTTPS"]=="on"){$pageURL.="s";}$pageURL.="://";if($_SERVER["SERVER_PORT"]!="80"){$pageURL.=$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"];}else{$pageURL.=$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"];}return$pageURL;}?>定义该函数之后就可以直接调用了:<?phpechocurPageURL();?>上面的函数可以获取当前页面完整的URL,即你在浏览器地址栏看到的内容。但是,有时候我们不想要URL中的参数(?号后面的内容),如:http://www.hack001.com/hello.html?u=123,只想获取http://www.hack001.com/hello.html,你可以将以上函数做以下更改:示例二:<?php//说明:获取无参数URLfunctioncurPageURL(){$pageURL='http';if($_SERVER["HTTPS"]=="on"){$pageURL.="s";}$pageURL.="://";$this_page=$_SERVER["REQUEST_URI"];//只取?前面的内容if(strpos($this_page,"?")!==false)$this_page=reset(explode("?",$this_page));if($_SERVER["SERVER_PORT"]!="80"){$pageURL.=$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$this_page;}else{$pageURL.=$_SERVER["SERVER_NAME"].$this_page;}return$pageURL;}?>当然也可以采用$_SERVER['PHP_SELF'](该变量不返回URL中的参数),<?php//说明:获取无参数URLfunctioncurPageURL(){$pageURL='http';if($_SERVER["HTTPS"]=="on"){$pageURL.="s";}$pageURL.="://";if($_SERVER["SERVER_PORT"]!="80"){$pageURL.=$_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER['PHP_SELF'];}else{$pageURL.=$_SERVER["SERVER_NAME"].$_SERVER['PHP_SELF'];}return$pageURL;}?>另外,$_SERVER['REQUEST_URI']和$_SERVER['REQUEST_URL']是有稍微区别的:$_SERVER["REQUEST_URI"]返回完整的路径(/directory/file.ext?query=string)$_SERVER['REQUEST_URL']只返回文件路径,不包括参数,(/directory/file.ext),和$_SERVER['PHP_SELF']差不多,只不过在有些服务器上$_SERVER['REQUEST_URL']不可用!注意:URL使用rewrite规则的时候,$_SERVER['PHP_SELF']和$_SERVER["REQUEST_URL"]可能不会返回你想要的东西最后提醒一点,$_SERVER["REQUEST_URI"]只有apache才支持,想要一个获取$_SERVER['REQUEST_URI']值的通用解决方案,可以使用以下方案:<?php//说明:获取_SERVER['REQUEST_URI']值的通用解决方案//来源:drupal-5.1bootstrap.inc//整理:http://www.codebit.cn/pub/html/php_mysql/tip/other/request_urifunctionrequest_uri(){if(isset($_SERVER['REQUEST_URI'])){$uri=$_SERVER['REQUEST_URI'];}else{if(isset($_SERVER['argv'])){$uri=$_SERVER['PHP_SELF'].'?'.$_SERVER['argv'][0];}else{$uri=$_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING'];}}return$uri;}?>

2013-4-2 3456 0
计算机语言

ignore_user_abort();函数搭配set_time_limit(0);和sleep($interval);即可实现以上自动更新。先给出一个基本的范式,其中有个人的测试程序:<?phpignore_user_abort();//函数设置与客户机断开是否会终止脚本的执行set_time_limit(0);//来设置一个脚本的执行时间为无限长$interval=30;do{$fp=fopen('text3.txt','a');fwrite($fp,'test');fclose($fp);sleep($interval);//函数延迟代码执行若干秒}while(true);?>首先运行该程序,然后关闭该页面,程序仍然运行中,test会每隔30秒的填补到text3.txt文件。最后根据php手册简单介绍一些相关的知识:1.连接处理:在PHP内部,系统维护着连接状态,其状态有三种可能的情况:0–NORMAL(正常)1–ABORTED(异常退出)2–TIMEOUT(超时)当PHP脚本正常地运行NORMAL状态时,连接为有效。当远程客户端中断连接时,ABORTED状态的标记将会被打开。远程客户端连接的中断通常是由用户点击STOP按钮导致的。当连接时间超过PHP的时限时,TIMEOUT状态的标记将被打开。可以决定脚本是否需要在客户端中断连接时退出。有时候让脚本完整地运行会带来很多方便,即使没有远程浏览器接受脚本的输出。默认的情况是当远程客户端连接中断时脚本将会退出。该处理过程可由php.ini的ignore_user_abort或由Apache.conf设置中对应的”php_valueignore_user_abort”以及ignore_user_abort()函数来控制。如果没有告诉PHP忽略用户的中断,脚本将会被中断,除非通过register_shutdown_function()设置了关闭触发函数。通过该关闭触发函数,当远程用户点击STOP按钮后,脚本再次尝试输出数据时,PHP将会检测到连接已被中断,并调用关闭触发函数。脚本也有可能被内置的脚本计时器中断。默认的超时限制为30秒。这个值可以通过设置php.ini的max_execution_time或Apache.conf设置中对应的”php_valuemax_execution_time”参数或者set_time_limit()函数来更改。当计数器超时的时候,脚本将会类似于以上连接中断的情况退出,先前被注册过的关闭触发函数也将在这时被执行。在该关闭触发函数中,可以通过调用connection_status()函数来检查超时是否导致关闭触发函数被调用。如果超时导致了关闭触发函数的调用,该函数将返回2。需要注意的一点是ABORTED和TIMEOUT状态可以同时有效。这在告诉PHP忽略用户的退出操作时是可能的。PHP将仍然注意用户已经中断了连接但脚本仍然在运行的情况。如果到了运行的时间限制,脚本将被退出,设置过的关闭触发函数也将被执行。在这时会发现函数connection_status()返回3。转:http://hi.baidu.com/helly/item/f14b871d5c88e60fb98a1aaa经过测试,用以上代码,就算把本身php文件删除,还是会继续执行,除非把php-cgi的进程结束,才不能继续执行了,太神奇了。又是一段邪恶的代码,哎。。还有,此代码是一死循环,切勿直接运用到程序中。