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);
?>