夕口技術錄

專業上的小常識,備而用之~

Category Archives: PHP

[eregi] – 不知算不算 php 的 bug

以下是在 pcname scan 程式中,
使用 nmblookup 碰到中文字時,
會出現被轉為奇怪字元的情形,
本會用 eregi 去判斷是否有此情況出現,
但…卻發現會出現以下情況 ???
也不知算不算 php 的 bug …
後來使用  stripos($pcname,"….") !== false 的方式來解決
if(eregi(“….“,"ACER3703″))
echo “in1″;
else
echo “out1″;
if(eregi(“..e“,"ACER3703″))
echo “in2″;
else
echo “out2″;
if(eregi(“__.","ACER3703″))
echo “in3″;
else
echo “out3″;
if(eregi(“..M","ACER3703″))
echo “in4″;
else
echo “out4″;
result : in1  in2 out3  out4

[jpgraph] – 中文字型及預設路徑

中文字型設定位置
#vi jpg-config.inc
DEFINE(‘CHINESE_TTF_FONT’,’bkai00mp.ttf’);

預設路徑
# vi jpgraph.php
DEFINE(‘TTF_DIR’,’/usr/share/fonts/zh_TW/TrueType/’);

[Smarty] – how to use 『break or continue』 ?

Smarty 樣版引擎,
如何在 section 迴圈要使用如 PHP 中所使用的 break 或 continue 呢 ?

方法還是得利用 Smarty 中 PHP 方法…

{section name=loop loop=$record}
{if $record[loop].id == “xx"}
{php}break;{/php}
{php}continue;{/php}
{/if}
{/section}

[Win] – 網路命令

Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。

简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,前段时间Yahoo就是被黑客利用数百台可以高速接入互联网的电脑连续发送大量Ping数据报而瘫痪的。
按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,你应能得到4个回送应答。 閱讀全文

[Win] – 網路命令

Ping是个使用频率极高的实用程序,用于确定本地主机是否能与另一台主机交换(发送与接收)数据报。根据返回的信息,你就可以推断TCP/IP参数是否设置得正确以及运行是否正常。需要注意的是:成功地与另一台主机进行一次或两次数据报交换并不表示TCP/IP配置就是正确的,你必须执行大量的本地主机与远程主机的数据报交换,才能确信TCP/IP的正确性。

简单的说,Ping就是一个测试程序,如果Ping运行正确,你大体上就可以排除网络访问层、网卡、MODEM的输入输出线路、电缆和路由器等存在的故障,从而减小了问题的范围。但由于可以自定义所发数据报的大小及无休止的高速发送,Ping也被某些别有用心的人作为DDOS(拒绝服务攻击)的工具,前段时间Yahoo就是被黑客利用数百台可以高速接入互联网的电脑连续发送大量Ping数据报而瘫痪的。
按照缺省设置,Windows上运行的Ping命令发送4个ICMP(网间控制报文协议)回送请求,每个32字节数据,如果一切正常,你应能得到4个回送应答。 閱讀全文

[PHP] – 字串移除空白

<?php
$str = " This line contains\tliberal \r\n use of whitespace.\n\n";

// 移除前後空白字
$str = trim($str);

// 移除重覆的空白
$str = preg_replace(‘/\s(?=\s)/’, “, $str);

// 移除非空白的間距變成一般的空白
$str = preg_replace(‘/[\n\r\t]/’, ‘ ‘, $str);

// Echo out: ‘This line contains liberal use of whitespace.’
echo “<pre>{$str}</pre>";
?>

[PHP][system][exec] – include 插入 exit 是否會影響原程式?

#vi aaa
#!/usr/local/xxx/bin/php -q
<?php
 echo system(“./bbb");
 echo “<—“;
?>

#!/usr/local/netsecure/bin/php -q
<?php
  exit;
 echo “–>";
?>

Result : <—

也就是說,
雖 aaa 所 include的 bbb 程式中有插入中止符號 exit
並不會影響到 aaa 原本的程式運作 ;
因 system 只會傳回 『Returns the last line of the command output on success, and FALSE on failure. 』
當然如使用 exec 也是不會影響到 aaa 原本的程式運作

[PHP][if-else] – 測試三元運算符與 if else 的運算速度

<?php
/**
* 以微秒为单位
* @return float
*/
function getMicrotime()
{
list($usec, $sec) = explode( , microtime());
return ((float)$usec + (float)$sec);
}


$fStartTime = getMicrotime();

for ($i=0; $i<100000; $i++){
$a = b;
if ($a==b) {
$a=c;
}
else{
$a=d;
}
}

$fEndTime = getMicrotime();

print $fEndTime $fStartTime;

print<br>;

$fStartTime = getMicrotime();

for ($i=0; $i<100000; $i++){
$a =
b;
$a = ($a==
b) ? c : ‘d;
}

$fEndTime = getMicrotime();

print $fEndTime $fStartTime;

?>
结果如下
0.133780002594  <- if else
0.106215000153  <- 三元
三元運算符比 if (){}else{} 快一些

[Apache][shell] – Apache 每天自動重啟程式


/usr/local/server/bin/shell_process_restart
#!/usr/local/server/bin/php -q

<?php

$ns_path = "/usr/local/server/";

//SIKO-> step.1 stop
$apache_process_stop = escapeshellcmd($ns_path."bin/apachectl stop");
$apache_process_test = escapeshellcmd("pgrep httpd");
do{
exec($apache_process_stop);
system($apache_process_test,$ptset);
$i++;
}
while($ptset == 0 && $i < 10000);

//SIKO-> step.2 start
$apache_process_start = escapeshellcmd($ns_path."bin/apachectl start");
do{
exec($apache_process_start);
system($apache_process_test,$ptset);
$j++;
}
while($ptset == 1 && $j < 10000);

?>

[crontab]
00 01 * * * /usr/local/server/bin/lockrun --lockfile=/usr/local/server/log/shell_process_restart.lock -- /usr/local/server/bin/shell_process_restart > /dev/null 2>&1

[PHP][&、~] – 位元運算子(bitwise operator)

“位元運算子" 大家平常是非常用的到東西,

但今天我才知道它的另外的用法,

下面就來舉個例吧!!!

echo(5&6); //結果為4

?為何呢…

因位元運算子是提供二進位的位元運算,計算過和如下…

運算子    範例        運算過程                                                 說明

& 11&13    11(1011) & 13(1101) = 9(1001)      將每個位元做 and 運算

| 11|13    11(1011) | 13(1101) = 15(1111)      將每個位元做 or運算

^ 11^13    11(1011) ^ 13(1101) = 6(0110)      將每個位元做 xor 運算

>> 11>>2    11(1011) >> 2 = 2(0010)      將位元向右移動,例右移兩位元

<< 11<<2  11(001011) << 2 = 44(101100)      將位元向左移動,例左移兩位元

~ 11~    ~11  = -12 將所有位元做反相運算,相當於將十進位數值乘一個負號再減1