phpfputs
A. php 怎麼調用列印機的控制命令
ESC使用\033表示,LF為\012,CR為\015
例如釋放紙的ESC q使用下面的命令輸出:
fputs($prn,"\033q");
fputs把內容發送給第一句,或者使用其它函數。
最後說明,上面的033、012、015是八進制
B. php多線程
以下都是轉載, 簡單說下, php是不支持多線程的。。。。
PHP語言本身是不支持多線程的. 總結了一下網上關於PHP模擬多線程的方法, 總的來說, 都是利用了PHP的好夥伴們本身所具有的多線程能力. PHP的好夥伴指的就是LINUX和APACHE啦, LAMP嘛.
另外, 既然是模擬的, 就不是真正的多線程. 其實只是多進程. 進程和線程是兩個不同的概念. 好了, 以下方法都是從網上找來的.
1. 利用LINUX操作系統
<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>
上面存成test.php, 然後寫一段SHELL代碼
#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done
2. 利用fork子進程(其實同樣是利用LINUX操作系統)
<?php
declare(ticks=1);
$bWaitFlag = FALSE; /// 是否等待進程結束
$intNum = 10; /// 進程總數
$pids = array(); /// 進程PID數組
echo ("Startn");
for($i = 0; $i < $intNum; $i++) {
$pids[$i] = pcntl_fork();/// 產生子進程,而且從當前行之下開試運行代碼,而且不繼承父進程的數據信息
if(!$pids[$i]) {
// 子進程進程代碼段_Start
$str="";
sleep(5+$i);
for ($j=0;$j<$i;$j++) {$str.="*";}
echo "$i -> " . time() . " $str n";
exit();
// 子進程進程代碼段_End
}
}
if ($bWaitFlag)
{
for($i = 0; $i < $intNum; $i++) {
pcntl_waitpid($pids[$i], $status, WUNTRACED);
echo "wait $i -> " . time() . "n";
}
}
echo ("Endn");
?>
3. 利用WEB SERVER, PHP不支持多線程, APACHE可是支持的, 呵呵.
假設我們現在運行的是a.php這個文檔. 但是我在程式中又請求WEB伺服器運行另一個b.php
那麼這兩個文檔將是同時執行的.
<?php
function runThread()
{
$fp = fsockopen('localhost', 80, $errno, $errmsg);
fputs($fp, "GET /a.php?act=brnrn");
fclose($fp);
}
function a()
{
$fp = fopen('result_a.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
function b()
{
$fp = fopen('result_b.log', 'w');
fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
runThread();
a();
}
else if($_GET['act'] == 'b') b();
?>
當然啦,也可以把需要多線程處理的部分交給java去處理, 然後在PHP里調用, 哈哈.
<?php
system('java multiThread.java');
?>
C. php 代碼備份資料庫
<?php
/*
**************functiondb_bak()********************
*功能:備份指定的資料庫中的指定表
*輸入(按傳入參數解釋):$db_name要備份的資料庫,$tb_array要備份的表,數組形式的,如果不是數組,將備份整個庫。
$dir輸出備份文件的目錄,$filename備份文件名,$block_num指定分塊大小(指一條insert語句包含幾天數據)
*輸出:備份的數據表的sql語句文件,可用於還原
*/
functiondb_bak($mylink,$dbname,$tab_array="",$dir,$filename,$block_num=20){
mysql_select_db($dbname,$mylink)ordb_error(mysql_error());
is_array($tab_array)or$tab_array=db_showtb($mylink,$dbname,true);//如果$tab_array不是數組,則取得整個庫的表
if($dir){
if(!file_exists($dir)){
$flag=mkdir($dir);
if(!$flag)
return2;
}
}
//檢查數據表是否存在
foreach($tab_arrayas$tab)
笑凳db_e_tab($mylink,$dbname,$tab)ordb_error($tab."is頃扮notexist!");
$fp=fopen($dir.$filename,"w");
foreach($tab_arrayas$tab){
fputs($fp,"DROPTABLEIFEXISTS".$tab."; ");
$tabdef_array=mysql_fetch_array(mysql_query("SHOWCREATETABLE".$tab,$mylink));
fputs($fp,str_replace(" ","",$tabdef_array["CreateTable"])."; ");
fputs($fp,"LOCKTABLES".$tab."WRITE; ");
$getvalue_result=mysql_query("select*from".$tab,$mylink);
if(mysql_num_rows($getvalue_result)){
$i=1;
雀升灶$p="";
$start_flag=true;
while($getvalue_array=mysql_fetch_row($getvalue_result)){
$values=join("','",array_map('db_data_check',$getvalue_array));
$start_flag&&fputs($fp,"insertinto".$tab."values");
if($i>$block_num){
fputs($fp,",('".$values."'); ");
$start_flag=true;
$i=0;
}else{
fputs($fp,$p."('".$values."')");
$start_flag=false;
$i++;
}
$p=$start_flag?"":",";
}
$start_flagorfputs($fp,"; ");
}
fputs($fp,"UNLOCKTABLES; ");
}
fclose($fp);
}
/*
**************functiondb_in()********************
*功能:還原備份函數db_bak生成的資料庫文件
*輸入(按傳入參數解釋):$db_name要備份的資料庫,$filename要還原的資料庫文件
*輸出:將數據還原到資料庫
*原理:將文件分割成一個數組,然後逐條將數據導入資料庫
*警告:執行該函數會刪除原來的數據表
*/
functiondb_in($mylink,$dbname,$filename){
if(!file_exists($filename)){
return0;
}
db_e_db($mylink,$dbname)or(mysql_query("createdatabase".$dbname,$mylink)ordb_error(mysql_error()));
mysql_select_db($dbname,$mylink);
$sql_array=file($filename);
foreach($sql_arrayas$sql){
mysql_query(trim($sql),$mylink)ordb_error(mysql_error());
}
}
?>
//我自己寫的。可以參考哈
D. php 如何發送http請求!
第一種實現方式:實用socket編程,通常我們實用fsockopen這個函數來創建一個socket連接,用fputs來發送一個請求
第二種實現方式:實用php的curl擴展,我們使用curl_init()來初始化一個連接,然後設置一堆的curl_setopt()的東西來設置url,post的數據等等,最後我們使用curl_exec()來實現請求。
第三種方式就是: 實用file_get_contents函數,其實我們平時抓取一個網頁可能只實用它的第一個參數,其實它的第三個參數就有數據了
E. 用PHP實現 讀取和修改文本文件內容的代碼
/**
* 讀文件
**/
function read_file($filename)
{
$fp = fopen($filename, "r") or die("couldn't open $filename");
$read = fread($fp, filesize($filename));
fclose($fp);
return $read;
}
/**
* 寫文件
**/
function write_file($filename, $buffer)
{
$fp = fopen($filename, "w") or die("couldn't open $filename");
flock( $fp, LOCK_EX );
$write = fputs($fp, $buffer);
flock( $fp, LOCK_UN );
fclose($fp);
return true;
}
/**
* 修改(只是追加內容)
**/
function append_to_file($filename, $buffer)
{
$fp = fopen($filename, "a") or die("couldn't open $filename");
flock( $fp, LOCK_EX );
fputs($fp, $buffer);
flock( $fp, LOCK_UN );
fclose($fp);
return true;
}
/**
* 測試
**/
$str = read_file('test.txt');
echo $str;
write_file('test2.txt', $str);
append_to_file('test2.txt', "ABCD");
其實,讀文件有更簡便的方法,你可以看看 file 和 file_get_contents 函數。
寫文件也有現成的 file_ put_ contents 函數。
F. PHP 中如何在同一個文件中寫入而不覆蓋以前寫的內容
<?php
$fp=fopen("a.txt","a");
fputs($fp,"123");
fclose($fp);
?>