分类目录归档:技术文章

str_replace函数使用

函数原型:mixed str_replace(mixed needle,mixed new_needle,mixed haystack[,int &count]);
      needle:要被替换的字符串,new_needle:替换用的字符串,haystack:操作字符串,count:替换次数【可选参数】
     我们重点试验前三个在使用数组是的执行方式:
    
      在都不使用数组时,该函数直接使用new_needle替换所有的needle并返回替换后的字符串。如:str_replace("m","n","my name is jim!")返回ny nane is jin!

     1、只对needle使用数组。
     示例:str_replace(array(‘m’,’i’),’n’,"my name is jim!");返回:ny nane ns jnn!
     可以看出,函数顺序性的对数组中每个字符串进行替换,并返回替换后的字符串。
      2、只对new_needle使用数组。
     示例:str_replace(‘m’,array(‘n’,’z’),"my name is jim!\n")返回:Arrayy naArraye is jiArray!
      该替换比较有意思,如果只对第二个参数使用数组则函数将其作为字符串Array进行使用,将所有的needle替换为了数组。
     3、只对haystack使用数组。
     示例:str_replace("m","n",array("my name is jim!","the game is over!"))该语句执行结果返回一个数组,即分别为传入的两个字符串替换后的结果。
     如果输出数组内容会看到:ny nane is jin! the gane is over!

     4、对needle和new_needle都使用数组。
     示例:str_replace(array("m","i"),array("n","z"),"my name is jim!")返回:ny nane zs jzn!
      查看执行结果可以发现,如果前两个参数都使用数组则函数把数组各个对象项字符串进行了替换,及needle的第一项替换为new_needle的第一项。以此类推。
      如 果needle数组比new_deedle长,例 如:str_replace(array("m","i","s"),array("n","z"),"my name is jim!");返回:ny nane z jzn!可见,对于needle数组多出来的字符串被替换为了空串。
     如果new_needle数组比needle长,例 如:str_replace(array("m","i"),array("n","z","x"),"my name is jim!")返回ny nane zs jzn!可见new_needle多余的项被忽略。
     5、三个参数都使用数组。
     例如:str_replace(array("m","i"),array("n","z"),array("my name is jim!","the game is over"))返回的数组内容:ny nane zs jzn!the gane zs over
     这个比较好理解,对两个字符串分别执行替换。

php生成验证码,应用实例

发现,帝国的下载页没有验证码,很容易被采集,想着应该下载地址能通过验证码,验证显示总应该可以防掉采集下载地址吧,其他地方没有现成的,只能想办法自己给改了。网上找了个生成验证码的PHP源码,给整合到帝国里去了,最终成功了,庆祝下。哈哈。源码下面保留下。

 

<?
Header("Content-type:image/png");
//定义header,声明图片文件,最好是png,无版权之扰;
//生成新的四位整数验证码
session_start();//开启session;
$authnum_session = ”;
$str = ‘abcdefghijkmnpqrstuvwxyz1234567890’;
//定义用来显示在图片上的数字和字母;
$l = strlen($str); //得到字串的长度;
//循环随机抽取四位前面定义的字母和数字;
for($i=1;$i<=4;$i++)
{
$num=rand(0,$l-1);
//每次随机抽取一位数字;从第一个字到该字串最大长度,
//减1是因为截取字符是从0开始起算;这样34字符任意都有可能排在其中;
$authnum_session.= $str[$num];
//将通过数字得来的字符连起来一共是四位;
}
session_register("authnum_session");
//用session来做验证也不错;注册session,名称为authnum_session,
//其它页面只要包含了该图片
//即可以通过$_SESSION["authnum_session"]来调用

//生成验证码图片,
srand((double)microtime()*1000000);
$im = imagecreate(50,20);//图片宽与高;
//主要用到黑白灰三种色;
$black = ImageColorAllocate($im, 0,0,0);
$white = ImageColorAllocate($im, 255,255,255);
$gray = ImageColorAllocate($im, 200,200,200);
//将四位整数验证码绘入图片
imagefill($im,68,30,$gray);
//如不用干扰线,注释就行了;
$li = ImageColorAllocate($im, 220,220,220);
for($i=0;$i<3;$i++)
{//加入3条干扰线;也可以不要;视情况而定,因为可能影响用户输入;
imageline($im,rand(0,30),rand(0,21),rand(20,40),rand(0,21),$li);
}
//字符在图片的位置;
imagestring($im, 5, 8, 2, $authnum_session, $white);
for($i=0;$i<90;$i++)
{//加入干扰象素
imagesetpixel($im, rand()%70 , rand()%30 , $gray);
}
ImagePNG($im);
ImageDestroy($im);
?>

 

<?
session_start();
//在页首先要开启session,
//error_reporting(2047);
session_destroy();
//将session去掉,以每次都能取新的session值;
//用seesion 效果不错,也很方便
?>
<html>
<head>
<title>session 图片验证实例</title>
</head>
<body>
此例为session验证实例
<form action="" method="post">
验证码:<input type="text" name="validate" value="" size=10> <img src="checkNum_session.php"><br>
<input type="submit">
</form>
<?php
//打印上一个session;
echo "上一个session:<b>".$_SESSION["authnum_session"]."</b><br>";
$validate="";
if(isset($_POST["validate"])){
$validate=$_POST["validate"];
echo "您刚才输入的是:".$_POST["validate"]."<br>状态:";
if($validate!=$_SESSION["authnum_session"]){
//判断session值与用户输入的验证码是否一致;
echo "<font color=red>输入有误</font>";
}else{
echo "<font color=green>通过验证</font>";
}
}
/*
//打印全部session;
PrintArr($_SESSION);
function PrintArr($aArray){
echo ‘<xmp>’;
print_r($aArray);
echo ‘</xmp>’;
}
*/
?>

Cannot send session cache limiter – headers already sent

session_start() [function.session-start]: Cannot send session cache limiter – headers already sent (output started at /var/www/inpublisher/1.:1)

出现这个问题的解决办法,

在PHP页面首部直接设置OB_START();,就可以解决!
 

修改php.ini中的session.auto_start = 0 为 session.auto_start = 1
output_buffering =改为on或者任何数字。

 

Unable to obtain IP address Information

Unable to obtain IP address
Information

We were unable to obtain an IP address automatically. Do you want to enter a static ip, or retry the connection?
 

用2WIRE 上网出现这个,也不知道是啥问题,呵呵,好像意思是哪里设置IP,我就对本机设了固定的IP,因为那个点进去有个是好像设置路由里面的静态IP什么的,不过由原来的自动获取,设成了固定的,好像已经都没有弹出这个来了。

div+css SEO命名规则

页头:header
登录条:loginBar
标志:logo
侧栏:sideBar
广告:banner
导航:nav
子导航:subNav
菜单:menu
子菜单:subMenu
搜索:search
滚动:scroll
页面主体:main
内容:content
标签页:tab
文章列表:list
提示信息:msg
小技巧:tips
栏目标题:title
加入:joinus
指南:guild
服务:service
热点:hot
新闻:news
下载:download
注册:regsiter
状态:status
按钮:btn
投票:vote
合作伙伴:partner
友情链接:friendLink
页脚:footer
版权:copyRight
1.css ID 的命名
外 套:  wrap
主导航:  mainNav
子导航:  subnav
页 脚:  footer
整个页面: content
页 眉:  header
页 脚:  footer
商 标:  label
标 题:  title
主导航:  mainNav(globalNav)
顶导航:  topnav
边导航:  sidebar
左导航:  leftsideBar
右导航:  rightsideBar
旗 志:  logo
标 语:  banner
菜单内容1: menu1Content
菜单容量: menuContainer
子菜单:  submenu
边导航图标:sidebarIcon
注释:   note
面包屑:  breadCrumb(即页面所处位置导航提示)
容器:   container
内容:   content
搜索:   search
登陆:   login
功能区:  shop(如购物车,收银台)
当前的   current
2.另外在编辑样式表时可用的注释可这样写:
<– Footer –>
内容区
<– End Footer –>
3.样式文件命名
主要的 master.css
布局,版面 layout.css
专栏 columns.css
文字 font.css
打印样式 print.css
主题 themes.css
 

dtim

  设置dtim间隔的值。dtim显示了mac层多点传输的频率。该参数对在节能模式下提供站点非常重要。为了最大化利用信道在节能模式下,
    数据并不向站点传送信标。在dtim间隔内这些站点必须启动以接收传送来的数据。dtim 是两个同步画面之间传送信息的间隔。如果设
    置值为2,接入器将为bss保存所有的多点传送的画面并在每个信标间隔时发送。减小dtim间隔在及时传送图画的方式下,从而使站点在
    节能的模式下启动频率更高,释放功率更快。设置更高的dtim值,将延迟多点传输的速度。(默认: 1)
   
   
    DTM 是一种倒数计秒的作业,用以告知下一个要接收广播及多重广播讯息的客户端窗口。当无线网络接入点 (AP) 已经为相关的客户端
    缓冲储存了一些广播流量或是多重广播讯息时,它就会传送夹带有下一个 DTM 间隔值的 DTM。当 AP 客户端听到 beacon 讯号时,就会
    去接收该广播及多重广播讯息。系统 DTIM 间隔的预设值为 1。
   
    这个值表示DTIM的间隔。DTIM是一个计时器,通知另一个窗口的用户接受广播和组波信息。当AP从客户端受到组波和广播时,它就在一
 

PHP需禁用的危险函数说明

phpinfo()
功能描述:输出 环境信息以及相关的模块、WEB 环境等信息。
危险等级:中

passthru()
功能描述:允许执行一个外部程序并回显输出,类似于 exec()。
危险等级:高

exec()
功能描述:允许执行一个外部程序(如 UNIX Shell 或 CMD 命令等)。
危险等级:高

system()
功能描述:允许执行一个外部程序并回显输出,类似于 passthru()。
危险等级:高

chroot()
功能描述:可改变当前 PHP 进程的工作根目录,仅当系统支持 CLI 模式
PHP 时才能工作,且该函数不适用于 Windows 系统。
危险等级:高

scandir()
功能描述:列出指定路径中的文件和目录。
危险等级:中

chgrp()
功能描述:改变文件或目录所属的用户组。
危险等级:高

chown()
功能描述:改变文件或目录的所有者。
危险等级:高

shell_exec()
功能描述:通过 Shell 执行命令,并将执行结果作为字符串返回。
危险等级:高

proc_open()
功能描述:执行一个命令并打开文件指针用于读取以及写入。
危险等级:高

proc_get_status()
功能描述:获取使用 proc_open() 所打开进程的信息。
危险等级:高

error_log()
功能描述:将错误信息发送到指定位置(文件)。
安全备注:在某些版本的 PHP 中,可使用 error_log() 绕过 PHP safe mode,
执行任意命令。
危险等级:低

ini_alter()
功能描述:是 ini_set() 函数的一个别名函数,功能与 ini_set() 相同。
具体参见 ini_set()。
危险等级:高

ini_set()
功能描述:可用于修改、设置 PHP 环境配置参数。
危险等级:高

ini_restore()
功能描述:可用于恢复 PHP 环境配置参数到其初始值。
危险等级:高

dl()
功能描述:在 PHP 进行运行过程当中(而非启动时)加载一个 PHP 外部模块。
危险等级:高

pfsockopen()
功能描述:建立一个 Internet 或 UNIX 域的 socket 持久连接。
危险等级:高

syslog()
功能描述:可调用 UNIX 系统的系统层 syslog() 函数。
危险等级:中

readlink()
功能描述:返回符号连接指向的目标文件内容。
危险等级:中

symlink()
功能描述:在 UNIX 系统中建立一个符号链接。
危险等级:高

popen()
功能描述:可通过 popen() 的参数传递一条命令,并对 popen() 所打开的文件进行执行。
危险等级:高

stream_socket_server()
功能描述:建立一个 Internet 或 UNIX 服务器连接。
危险等级:中

putenv()
功能描述:用于在 PHP 运行时改变系统字符集环境。在低于 5.2.6 版本的 PHP 中,可利用该函数
修改系统字符集环境后,利用 sendmail 指令发送特殊参数执行系统 SHELL 命令。
危险等级:高

 

改为: disable_functions =passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,ini_alter,ini_restore,dl,pfsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server

网络电台架设方法

前期准备

  硬件:一块浮点运算能力强劲的CPU(AthlonXP或者Pentium 4以上最佳);一块好的
声卡(低CPU占用者佳,如创新Live!和Audigy系列);良好的上行带宽(至少是ISDN,可以承受2~3位听众);一只麦克风(过一过当DJ的瘾)。当然以上只是推荐配置,低点也可以。

  软件:Windows Media编码器9.0:资源占用小,低比特率下音质较高,易学易用且免费;众多的数字音频格式文件:MP3、MPC、WMA、APE、WAV或者CD,甚至VCD、DVD等。
Windows Media编码器9.0 下载地址:http://www.maqie.com/download/WMEncoder.rar
  编码器的设置

  启动Windows Media编码器,软件会自动弹出设置向导,选默认的“广播实况事件”即可。然后选择一块录音质量比较好的声卡作为音频设备,假如只有一块板载的AC'97,选默认就行了。此后的选择是选择发送广播的服务器,是现在正在用的PC呢,还是有专用的Windows Media服务器。我等DIYer当然只能用自己的电脑了。选择″自编码器拉传递″即可。Windows Media编码器默认的服务端口是8080端口,但是最好不要用这个默认设置,点击″查找可用端口″选择一个当前没有占用的端口,选择一个比较容易记的数字。

  编码选项是关系到带宽和音质的,同时也关系到对系统资源的占用,非常关键。系统配置较高的话可以选择″多比特率编码(CBR)″,选中135/70/54Kbps三种可以适应更多带宽状况。如果不打算录音,建议不要将广播保存到文件。以免占用不必要的硬盘空间。

  注意:以上设置中最重要的就是编码比特率的选择,如果你现在仍然无法确定应该用何种编码比特率,请一个网友帮助你测试是很好的选择。

  小喇叭开始广播啦!

  调试之前还需要修改系统默认的录音选项。打开音频控制面板,点击“查看-音频面板-混音器-录音控制-选项-属性-显示下列音量控制”,复选“Stereo Mixer”(由于声卡的不同,主要由于驱动内的名称定义不同,不同系统上这个选项名称可能会有所不同),选择一个可以录制系统全部声音的选项(一个不是很明确的选项,像这里的Stereo Mixer并没有说明是什么设备,不像“Mic”之类的那么确定)。选好以后关掉“录音控制”。

  注意:如果你找不到这个选项,请更新一下声卡驱动程序,板载AC'97都有这个选项,大多数声卡都是支持采集系统全部声音的。录音设备的选择是非常重要的,它关系到实时采集的电台是否可以“出声”。如果设置不正确,你将不能建立实时采集的电台。

  设置好编码器后点击“开始编码”并找到喜欢的音乐就可以开始广播了,注意要关掉防火墙(尤其是WinXP自带的)。此时使用任何播放器播放的音频都会通过他的个人电台对外广播出去,所以可以自由选择播放器,尽量使用音质优秀,系统资源占用小的播放器就行了。现在,可以开始邀请好友来听自己开播的电台了!地址是:

  mms?//你的IP地址?你自定义的端口

  提示:单击“文件-保存”把当前的设定保存到文件,做几个完全不同的设置,下一次想调用什么样的设置,只需要打开相应的设置文件就可以了。

  建立“源”方式电台

  实时编码的电台虽然灵活性好,但是也有很多麻烦:电脑操作的系统声音,包括QQ、MSN等等的声音都会广播出去,影响广播质量。同时,听众会经常要求点歌,但是这些歌你又不是很想听,这也是一件很郁闷的事情。更头痛的是,麦克风可不管你什么时候想说话,会把房间里的所有声音都广播出去,这叫什么DJ呢?

  幸好,Windows Media编码器提供了建一种“源”电台的方式。可以很容易做到点歌和自己听歌,操作其他程序互相不冲突。点击主界面上的“新建会话-自定义会话-源标签页-源来自-文件-浏览”添加多个文件后,左边会多出很多的“源”,选中这些“源”可以看到这些就是刚才选择播放的文件。然后我们需要对每一个源设置这个源结束以后的动作,设置为“滚动到下一个源”就可以连续播放,“滚动到第一个源”即可整体循环播放。

  现在单击“开始编码”,就可以对外广播了,此时编码器会直接把“源”文件编码输出,在自己的PC上是听不到的,即便使用其他播放器,播放的音乐也不会进入到广播当中。

  提示:只要单击“查看-属性面板”就可以继续对当前不在播放的源进行操作,包括添加和删除“源”。

  我要做DJ!

  此时,你不但可以添加其他的文件进来,而且可以添加设备作为源,也就是说,我们可以在放完一首歌以后,使用设备作为下一个源,这样就可以在两首歌之间加入旁白等等以实现电台DJ的效果。

  单击“源”下面的“添加-设备-配置-属性-插头线”,在下拉列表中选择需要的输入设备,如希望实现主持人的效果,可以选Mic(麦克风),这样就可以通过麦克风进行电台的节目主持;或者选择“Stereo Mixer”,这样就像实时电台一样,播放系统所有的声音,此时我们可以一边用播放器播放伴奏,一边用麦克风唱歌表演Live Show或者在播放歌曲的时候发表自己的点评。

  设置好以后单击“确定-应用”就可以使刚才的设置生效,想要使用这个源时,你可以使用“添加”按钮旁的上下箭头来移动选中的源,将其放置到一个即将播放完的源后面(假如你想在某个“源”后发表一下评论,可以把设备“源”移动到该“源”后面)。如果想表演Live Show,还可以使用插件对人声做一些修饰,比如加入回响等,不多介绍了。

  提示:“源”方式是很有特点的方式,也是比较复杂的方式,但是它可以实现的效果更多更专业,同时如果设置得当,也可以让开电台和工作两不误。

  内网用户如何建立电台?

  有些校园网用户也拥有独立的因特网IP,可是有的学校每个寝室只能分配到一个IP,也就是说,共享上网的同学就没有独立的IP了,属于内网用户,那他们如何开电台呢?

  内网用户需要他们的网关服务器(网关服务器具有独立的因特网IP)支持端口映射,将他们的广播端口映射到网关的端口。一般来说,现在的小型网关路由器,或者安装了双网卡作为网关的PC都可以做到端口映射。端口映射方法请参考该路由器的说明手册,一般都会有比较详细的说明;网关PC的端口映射则和操作系统有关,采用Windows2000/XP/2003的PC在“网络连接-共享-高级-设置”里都可以设置端口映射。

  一些软件比如CCproxy等也带有端口映射功能。设置完成后,广播地址就是mms?//网关的IP?网关上映射好的端口。

  如果想建设一个长期的电台,推荐你申请一个二级域名来简化工作,这样可以免除你不少麻烦(虽然这并不是一个有效的手段)。这样广播链接就是:

  mms?//你的域名?你的广播端口

  总之,一个网络电台需要你自己建立、宣传,要吸引听众,要靠优秀的内容、良好的连接速度和音质,才能完美。希望大家的电台都能更精彩。