一些PHP代码片段_1


1.产生指定长度的随机字符串
<?php

function random_string($length, $max=FALSE){
	if (is_int($max) && $max > $length){
		$length = mt_rand($length, $max);
	}
	$output = '';

	for ($i=0; $i<$length; $i++){
		$which = mt_rand(0,2);

		if ($which === 0){
			$output .= mt_rand(0,9);
		} elseif ($which === 1) {
			$output .= chr(mt_rand(65,90));
		} else {
			$output .= chr(mt_rand(97,122));
		}
	}
	return $output;
}
echo random_string(8)."n";
echo random_string(8, 11)."n";
2.获取文件夹大小
<?php
	function dirSize($directoty){
		$dir_size = 0;
		if($dir_handle = @opendir($directoty))
		{
			while($filename = readdir($dir_handle)){
				$subFile = $directoty.DIRECTORY_SEPARATOR.$filename;
				if($filename == '.' || $filename == '..'){
					continue;
				}elseif (is_dir($subFile)) {
					$dir_size += dirSize($subFile);
				}elseif (is_file($subFile)){
					$dir_size += filesize($subFile);
				}
			}
			closedir($dir_handle);
		}
		return ($dir_size);
	}

	$dir_size=dirSize( getcwd() );
	echo round($dir_size/pow(1024,1), 2)."KB";
?>
3.实现简单的聊天功能
<?php
if(!extension_loaded('sockets')) {
	if(strtoupper(substr(PHP_OS, 0, 3)) == "WIN") {
		dl('php_sockets.dll');
	}else {
		dl('sockets.so');
	}
}

// set_time_limit(0);
$address = '127.0.0.1';
$port = '123123';
$welcome_msg = "rnWelcome to the PHP Test Server.";
$welcome_msg .= "rnTo quit, type 'quit'. To shutdown the server just type 'shutdown'.rn";
$msg_len = 1024;
$msg_eof = "n"; //信息结束标记
$usleep = 1000*100; //间隔周期
$connections = array();

$commonProtocol = getprotobyname("tcp");

if(($sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)) === false) {
	echo "socket_create() failed: reason: " . socket_strerror(socket_last_error()) . "rn";
	exit;
}
if (socket_bind($sock, $address, $port) === false) {
	echo "socket_bind() failed: reason: " . socket_strerror(socket_last_error($sock)) . "rn";
	exit;
}
if (socket_listen($sock, 15) === false) {
	echo "socket_listen() failed: reason: " . socket_strerror(socket_last_error($sock)) . "rn";
	exit;
}

socket_set_nonblock($sock) or die('failed to set nonblock');

// Accept any incoming connections to the server
do {
	@ $connection = socket_accept($sock);
	if($connection) {
		$connections[] = array('con'=>$connection, 'bufs'=>'');
		socket_write($connection, $welcome_msg, strlen($welcome_msg));
		unset($connection);
	}

	$talk_bufs = '';
	foreach($connections as $xid => & $client) {
		unset($bufs);

		$connection = $client['con'];
		$bufs = &$client['bufs'];

		if(false === socket_write($connection, $talkback, strlen($talkback))) {
			echo "socket_write() failed: reason: " . socket_strerror(socket_last_error($connection)) . "rn";
			socket_close($connection);
			unset($connections[$xid]);
			continue;
		}

		// if (false === ($buf = socket_read($connection, $msg_len, PHP_NORMAL_READ))) {
		if (false === ($buf = socket_read($connection, $msg_len))) {
			continue;
		}

		$bufs .= $buf;
		if(false === strpos($bufs, $msg_eof)) {
			continue;
		}

		$buf = substr($bufs,0,(strrpos($bufs, $msg_eof)));
		$bufs = substr(strrchr($bufs, $msg_eof), 1);

		if (!$buf = trim($buf)) {
			continue;
		}
		// 判断刷屏
		if(strrpos($buf, $msg_eof) || (strlen($buf) > $msg_len)) {
			$buf = 'quit';
		}
		if ($buf == 'quit' || $buf == 'exit') {
			socket_close($connection);
			unset($connections[$xid]);
			continue;
		}
		if ($buf == 'shutdown') {
			socket_close($connection);
			break 2;
		}

		$talk_bufs .= "PHP: $xid said '$buf'.rn";
	}

	$talkback = $talk_bufs;
	usleep($usleep);
} while(true);
socket_close($sock);

// 使用方法 telnet 连接 127.0.0.1 123123 端口,可以绑定外部IP
// 使用的时候最好在 cli 方式下执行
4.自定义匹配函数
<?php
/* 自定义匹配函数 Version 1*/

function isMatch($string1, $string2) {
    $array1 = array();
    $array2 = array();

    // 将字符串分解为数组
    for ($i=0; $i<strlen($string1); $i++)
        $array1[] = $string1[$i];

    for ($i=0; $i<strlen($string2); $i++)
        $array2[] = $string2[$i];

    // 将数组转换为元素频度数组
    $array1_count = array_count_values($array1);
    $array2_count = array_count_values($array2);

    // 将数组按键值升序排序
    ksort($array1_count);
    ksort($array2_count);

    if ($array1_count == $array2_count)
        echo 'match success!';
    else
        echo 'match fail!';
}
// 测试
isMatch('abcda', 'adabc');  // 打印 'match success!'
5.文件切割的PHP脚本
<?php

$fp=fopen("fxxk.jpg","rb");
$sum=0;
for($i=0; $i<9999999999; $i++) {
	$temp=fread($fp,1024*199);	//199KB每块,因为非注册版的winhex只能编辑保存200KB以下的文件
	if(strlen($temp)==0) {
		break;
	}
	$temp2=fgets($fp);
	if(strlen($temp2)!=0) {
		$temp.=$temp2;
	}
	$f=fopen("temp{$i}.jpg","wb");
	fwrite($f,$temp);
	fclose($f);
}
echo "OK.";

 

 

待续……

,

《 “一些PHP代码片段_1” 》 有 2 条评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注