源码

<?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 5255 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 3250 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的进程结束,才不能继续执行了,太神奇了。又是一段邪恶的代码,哎。。还有,此代码是一死循环,切勿直接运用到程序中。

计算机语言

一、echoecho()实际上不是一个函数,是php语句,因此您无需对其使用括号。不过,如果您希望向echo()传递一个以上的参数,那么使用括号会发生解析错误。而且echo是返回void的,并不返回值,所以不能使用它来赋值。例子:<?php$a=echo("xshell");//错误!不能用来赋值echo"xshell";//xshellecho("xshell");//xshellecho("xshell","net");//发生错误,有括号不能传递多个参数echo"xshell","net","is","web";//不用括号的时候可以用逗号隔开多个值,会输出xshellnetiswebecho"xshellisgoodweb.";//不管是否换行,最终显示都是为一行xshellisgoodweb.echo"$fistnamenet";//如果$firstname="xshell",则会输出xshellnet.echo'$firstnamenet';//由于使用单引号,所以不会输出$firstname的值,而是输出$firstnamenet?>二、printprint()和echo()用法一样,但是echo速度会比print快一点点。实际上它也不是一个函数,因此您无需对其使用括号。不过,如果您希望向print()传递一个以上的参数,那么使用括号会发生解析错误。注意print总是返回1的,这个和echo不一样,也就是可以使用print来赋值,不过没有实际意义。例子:<?php$a=print("xshell");//这个是允许的echo$a;//$a的值是1?>三、print_r函数print_r函数打印关于变量的易于理解的信息。语法:mixedprint_r(mixed$expression[,boolreturn])如果变量是string,integerorfloat,将会直接输出其值,如果变量是一个数组,则会输出一个格式化后的数组,便于阅读,也就是有key和value对应的那种格式。对于object对象类同。print_r有两个参数,第一个是变量,第二个可设为true,如果设为true,则会返回字符串,否则返回布尔值TRUE。例子:<?php$a="xshell";$c=print_r($a);echo$c;//$c的值是TRUE$c=print_r($a,ture);echo$c;//$c的值是字符串xshell?>四、printf函数printf函数返回一个格式化后的字符串。语法:printf(format,arg1,arg2,arg++)参数format是转换的格式,以百分比符号(“%”)开始到转换字符结束。下面是可能的format值:*%%–返回百分比符号*%b–二进制数*%c–依照ASCII值的字符*%d–带符号十进制数*%e–可续计数法(比如1.5e+3)*%u–无符号十进制数*%f–浮点数(localsettingsaware)*%F–浮点数(notlocalsettingsaware)*%o–八进制数*%s–字符串*%x–十六进制数(小写字母)*%X–十六进制数(大写字母)arg1,arg2,arg++等参数将插入到主字符串中的百分号(%)符号处。该函数是逐步执行的,在第一个%符号中,插入arg1,在第二个%符号处,插入arg2,依此类推。如果%符号多于arg参数,则您必须使用占位符。占位符被插入%符号之后,由数字和“\$”组成。可使用数字指定显示的参数,详情请看例子。例子:<?phpprintf("Mynameis%s%s。","xshell","net");//Mynameisxshellnet。printf("Mynameis%1\$s%1\$s","xshell","net");//在s前添加1\$或2\$.....表示后面的参数显示的位置,此行输出MynameisRickyRicky因为只显示第一个参数两次。printf("Mynameis%2\$s%1\$s","xshell","net");//Mynameisnetxshell?>五、sprintf函数此函数使用方法和printf一样,唯一不同的就是该函数把格式化的字符串写写入一个变量中,而不是输出来。例子:<?phpsprintf("Mynameis%1\$s%1\$s","xshell","net");//你会发现没有任何东西输出的。$out=sprintf("Mynameis%1\$s%2\$s","xshell","net");echo$out;//输出Mynameisxshellnet?>六、var_dump函数功能:输出变量的内容、类型或字符串的内容、类型、长度。常用来调试。<?php$a=100;var_dump($a);//int(100)$a=100.356;var_dump($a);//float(100.356)?>转:http://www.2cto.com/kf/201208/147096.html

2013-3-30 5451 0
计算机语言

这样一来就检索出当前页面的局部变量了,接下来我们可以来结合前面的SQL语句来实现根据不同环境ID调用内容不同栏目内容。  例如:  {dede:php}  $thisid=$refObj->Fields['id'];  $row=$dsql->GetOne('selectid,typenamefromdede_arctypewhereid='.$thisid);  print_r($row);  {/dede:php}  这样是来调用当前栏目的标题,这个标签功能类似于{dede:field.typename/}  写自己的标签,让别人说去吧  DedeCMS从V5.3开始就支持自己扩展标签,不过许多新人很少用那个东西,今天我就来简单的介绍下如何编写自己的调用标签。  我们需要知道下扩展标签的存放目录及文件名构成,首先,扩展的标签都是存放在/include/taglib这个目录,名称都是以“标签名.lib.php”格式,例如{dede:channel/}标签对应的是channel.lib.php文件。  我们可以看一个示例标签:demotag.lib.php    if(!defined('DEDEINC'))  {  exit("RequestError!");  }  functionlib_demotag(&$ctag,&$refObj)  {  global$dsql,$envs;  //属性处理  $attlist="row|12,titlelen|24";  FillAttsDefault($ctag->CAttribute->Items,$attlist);  extract($ctag->CAttribute->Items,EXTR_SKIP);  $revalue='';  //你需编写的代码,不能用echo之类语法,把最终返回值传给$revalue  //------------------------------------------------------  $revalue='HelloWord!';  //------------------------------------------------------  return$revalue;  }  ?>  我们登录系统后台的[模板]-[全局标签测试]中运行{dede:demotag/},显示如下的结果:  这里我们知道,其实标签生成的内容其实是这个函数的一个返回值,这里返回的内容都是字符串,也就是函数return$revalue;中的$revalue需要是经过处理后生成的字符串。  $attlist="row|12,titlelen|24";这个是属性列表,这个经过函数处理后会直接生成变量并复制,我们可以测试下,做如下的修改:  $revalue='HelloWord!';  $revalue.="Row:".$row.";TitleLen:".$titlelen;  这样我们可以看到,这个属性已经被创建变量并且赋值了。  接下来我们可以再进一步去修改这个标签。  比如说我们需要写一个标签专门来查询文章内容页的那个相关文章,功能类似于上面sql标签中的那个sql,只是这里我们将其分装为一个标签。  我们可以新建一个标签,例如叫writerarc,那我们就需要创建一个writerarc.lib.php,然后模仿demotag编写函数,注意需要修改为  functionlib_writerarc(&$ctag,&$refObj)  接下来我们就可以编写查询语句及对底层模板处理的相关函数了  $revalue='';  $innertext=$ctag->GetInnerText();  $ctp=newDedeTagParse();  $ctp->SetNameSpace('field','[',']');  $sql="SELECT*FROMdede_archivesWHEREwriter='{$refObj->Fields['writer']}'limit0,$row";  $innertext这个是用来获取标签的底层模板的,$ctp创建用于处理底层模板中的变量,并处理进行替换。我们根据获取的属性编写我们的sql语句,这里我们使用limit0,$row,这样就可以根据$row来确定查询的内容数目。  当然我们可以获取更多的属性以便我们这个标签更强大,例如我们可以增加类似于arclist中的相关属性,并在函数中进行处理,不过这个需要有一定的PHP基础。  接下来我们通过执行查询对sql及输出变量进行处理:  $dsql->Execute('me',$sql);  while($rs=$dsql->GetArray('me'))  {  //根据属性处理查询变量  $rs['title']=cn_substr($rs['title'],$titlelen);  //获取底层模板  $ctp->LoadSource($innertext);  foreach($ctp->CTagsas$tagid=>$ctag){  if(!empty($rs[strtolower($ctag->GetName())])){  $ctp->Assign($tagid,$rs[$ctag->GetName()]);  }  }  //根据底层模板及查询变量得到处理结果  $revalue.=$ctp->GetResult();  }  这样我们就将查询出来的结果同底层模板中出现的相关变量进行替换,然后生成输出字符串,将所有的字符串信息存储到$revalue中。  最后返回这个值return$revalue;  整个文件内容如下:    if(!defined('DEDEINC'))  {  exit("RequestError!");  }  functionlib_writerarc(&$ctag,&$refObj)  {  global$dsql,$envs;  //属性处理  $attlist="row|12,titlelen|24";  FillAttsDefault($ctag->CAttribute->Items,$attlist);  extract($ctag->CAttribute->Items,EXTR_SKIP);  $revalue='';  $innertext=$ctag->GetInnerText();  $ctp=newDedeTagParse();  $ctp->SetNameSpace('field','[',']');  $sql="SELECT*FROMdede_archivesWHEREwriter='{$refObj->Fields['writer']}'limit0,$row";  $dsql->Execute('me',$sql);  while($rs=$dsql->GetArray('me'))  {  //根据属性处理查询变量  $rs['title']=cn_substr($rs['title'],$titlelen);  //获取底层模板  $ctp->LoadSource($innertext);  foreach($ctp->CTagsas$tagid=>$ctag){  if(!empty($rs[strtolower($ctag->GetName())])){  $ctp->Assign($tagid,$rs[$ctag->GetName()]);  }  }  //根据底层模板及查询变量得到处理结果  $revalue.=$ctp->GetResult();  }  return$revalue;  }  ?>  接下来我们来测试我们这个标签,我们修改article_article.htm模板,在里面加入以下的标签代码:  {dede:writerarcrow='10'titlelen='6'}  [field:title/]  {/dede:writerarc}  通过动态浏览页面进行查看调试http://www.dedecms.com/plus/view.php?aid=3,我们会发现标签起作用了,输出了我们的内容。  至此我们完成了标签的编写,这里面主要涉及到PHP、MySQL的很多知识,需要有一定相关方面的基础才能够编写标签了,当然这里只是一个简单的标签开发例子,还有许多的东西可以去开发。转自:http://hi.baidu.com/aloneseo/item/4cb9a733419ee7ffa88428c7

2013-3-30 4166 0
计算机语言

require_oncedirname(__FILE__)."pub_db_mysql.php";//引用数据库文件//确保数据库信息填写正确//数据库连接信息$cfg_dbhost='localhost';$cfg_dbname='sccms';$cfg_dbuser='root';$cfg_dbpwd='123456';$cfg_dbprefix='sc_';$cfg_db_language='utf8';//新建一个数据库操作类$dsql=newScSql(false);////////////////////////////////获取一条记录的内容/////////////////////////////////下面是获取一条记录使用实例$row=$dsql->GetOne("Select*Fromdede_*whereid=$aid");//获取数据内容保存在数组$row中,通过下标可以将其调用出来echo$row['id'];//下面是循环调用记录/////////////////////////////////////////////////////////////////////////////////////////////////////////////将查询获取总数输出///////////////////////////////获取一个查询记录总数$row=$dsql->GetOne("selectcount(*)asddwheretypeid=$typeid");echo$row['dd'];//输出总数/////////////////////////////////////////////////////////////////////////////////////////////////////////////将查询的若干条记录输出//////////////////////////////////$sql="Select*fromdede_*";$dsql->SetQuery($sql);//将SQL查询语句格式化$dsql->Execute();//执行SQL操作//通过循环输出执行查询中的结果while($row=$dsql->GetArray()){echo$row['id'];echo$row['title'];}//或者采取这种方式输出内容while($row=$dsql->GetObject()){echo$row->id;echo$row->Title;}/////////////////////////////////////////////////////////////////////////////////////////////////////////////插入一条记录///////////////////////////////$sql="INSERTINTO`dede_member_flink`(mid,title,url,linktype,imgurl,imgwidth,imgheight)VALUES(".$cfg_ml->M_ID.",'$title','$url','$linktype','$imgurl','$imgwidth','$imgheight');";//插入记录数据库$dsql->SetQuery($sql);//格式化查询语句$dsql->ExecNoneQuery();//执行SQL操作////////////////////////////////////////////////////////////////////////////////////////////////////////////////////删除一条记录///////////////////////////$sql="DeleteFromdede_member_flinkwhereaid='$aid'Andmid='".$cfg_ml->M_ID."';";$dsql->SetQuery($sql);$dsql->ExecNoneQuery();//或者使用简化模式$dsql->ExecNoneQuery("DeleteFromdede_member_flinkwhereaid='$aid'Andmid='".$cfg_ml->M_ID."';");/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////更新一条记录//////////////////////////$upquery="Updatedede_member_flinksettitle='$title',url='$url',linktype='$linktype',imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight'whereaid='$aid'Andmid='".$cfg_ml->M_ID."';";$rs=$dsql->ExecuteNoneQuery($upquery);///////////////////////////////////////////////////////////////////////////////////////////////////////////////判断获取数据库内容的常用方法///////////////////$row=$dsql->GetOne("Select*Fromdede_moneycard_typewheretid={$pid}");if(!is_array($row)){echo"失败";exit();}/////////////////////////////$upquery="Updatedede_member_flinksettitle='$title',url='$url',linktype='$linktype',imgurl='$imgurl',imgwidth='$imgwidth',imgheight='$imgheight'whereaid='$aid'Andmid='".$cfg_ml->M_ID."';";$rs=$dsql->ExecuteNoneQuery($upquery);if($rs){echo"成功";}else{echo"失败";}//////////////////////////////////获取总数//////////////////////////////////$dsql=newDedeSql(false);$dsql->SetQuery("Select*from`dede_admin`whereuserid='$userid'Oruname='$uname'");$dsql->Execute();$ns=$dsql->GetTotalRow();////////////////////////////////关闭数据库///////////////////////////////////$dsql->Close();转:http://blog.sina.com.cn/s/blog_5d568fff0100crzs.html

2013-3-30 5350 0