使用php创建word文档的例子

 更新时间:2016年11月25日 16:19  点击:1608
下面来看一个使用php创建word文档的例子的,创建word文件处理类非常的简单,我们只要加载起来然后创建类再生成就可以了。

例子

 代码如下 复制代码

<?php
include("word.php");
$word=new word;
$word->start();
?>

<title>直接用php创建word文档</title>
 <h1>直接用php创建word文档</h1>
 作者:axgle
<hr size=1>
 <p>如果你打开word.doc,看到了这里的介绍,则说明word文档创建成功了。
<p>
不论是在什么操作系统下,使用本方法都可以直接用PHP生成word文档。绝对不是吹牛!
就算是没有安装word,也能够生成word文件。
当然了,生成的word文件可以用word,wps或者其他软件打开。
<p>
<b>使用方法:</b>
<br>
首先用$word->start()表示要生成word文件了。
然后你可以输出任何的HTML代码,不论是从文件读过来再写到这里,
还是直接在这里输出HTML,都没有关系。

<p>等你输出完毕后,用$word->save($path)方法,其中$path是你想
生成的word文件的名称(可以给出完整的路径).当你使用了$word->save()
方法后,这后面的任何输出都和word文件没有关系了,也就是说word的生成
工作就完成了。之后就和你平常使用php的方式一样拉。随便你输出什么东西,
都直接在浏览器里输出,而不会写到word里面去。
<p>这是本人想到的一个很有意思的方法,它的实现方法出人意料的简单,并且避免
了对windows环境的依赖。
<br>哈哈,很有意思吧?享受它吧!
<hr size=1>

 

 代码如下 复制代码

<?php
$word->save("data.doc");//保存word并且结束.

echo '
<title>直接用php创建word文档</title>
<h1>直接用php创建word文档</h1>
生成word了吗?在你的目录下看看有没有data.doc!
<br>
如果你用的是windows,并且安装得有word,可以查看<p>
<a href="data.doc" target=_blank>这里</a>';
?>

word.php文件

 代码如下 复制代码

<?php
class word

/*
@GNU:GPL
@author axgle <axgle@yahoo.com.cn>
@date 2005.4.20
*/

function start()
{
ob_start();
print'<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">';

}

function save($path)
{

print "</html>";
$data = ob_get_contents();

ob_end_clean();

$this->wirtefile ($path,$data);
}

function wirtefile ($fn,$data)
{

$fp=fopen($fn,"wb");
fwrite($fp,$data);
fclose($fp);
}

}

?>

下面本文章重点给大家介绍关于php中nusoap调用java axis2发布的webservice例子,希望此例子能帮助大家。

调用webservice

开发环境是:Eclipse3.6 (java IDE)+ JDK 1.6 + Tomcat 7.0 + Axis2 1.6 + php 5.2.14 (IDE为eclipse-php-helios-SR1-win32.zip)+ apache2.2.15,这些软件随时都在更新,请读者谷歌百度一下到官网下载。

一、在java端编写服务,并利用axis2发布成服务

本文的服务名为sayHi,里面有一个函数sayHello():

 代码如下 复制代码
package Hi;
publicclass sayHi {
  public String sayHello(String user,String info) {
    return"Hello, My Friend "+ user + info;
  }
}

二、编写php客户端,调用axis2发布的webservice

2.1 下载nusoap.rar,将解压出来的lib文件夹添加到工程

2.2 编写客户端php,内容如下:

 代码如下 复制代码

<?php
require_once ("./lib/nusoap.php");

// 要访问的webservice路径
$NusoapWSDL="http://localhost:8080/axis2/services/sayHi?wsdl";

// 生成客户端对象
$client = new nusoap_client($NusoapWSDL);
//$client->soap_defencoding    =    'UTF-8';  
//$client->decode_utf8    =    false;

// 设置参数(注意:PHP只能以'数组集'方式传递参数)
$param = array( 'user' => '国假不旅游 ',
'info' => ' Welcome to my home!');

// 调用远程方法 'sayHello'为服务中的方法名
//'http://Hi'为wsdl文件中targetNamespace的值
$result = $client->call('sayHello', $param,'http://Hi');

// 显示执行结果
if (!$err=$client->getError()){ 
echo $result;   
}else{ 
echo $err; 

?>

三、执行结果为:

Hello, My Friend 国假不旅游 Welcome to my home!

webservice乱码问题

许多使用NuSoap 调用.NET WebService或J2EE WebService的朋友可能都遇到过中文乱码问题(我用的是PHP调用NuSoap),下面介绍这一问题的出现的原因和相应的解决方法。
NuSoap调用WebService出现乱码的原因:

通常我们进行WebService开发时都是用的UTF-8编码,这时我们需要设置:

$client->soap_defencoding = ‘utf-8′;

同时,需要让xml以同样的编码方式传递:

$client->xml_encoding = ‘utf-8′;

至此应该是一切正常了才对,但是我们在输出结果的时候,却发现返回的是乱码。

NuSoap调用WebService出现乱码的解决方法:

实际上,开启了调试功能的朋友,相信会发现$client->response返回的是正确的结果,为什么$result = $client->call($action, array(‘parameters’ => $param)); 却是乱码呢?

研究过NuSoap代码后我们会发现,当xml_encoding设置为UTF-8时,NuSoap会检测decode_utf8的设置,如果为true,会执行 PHP 里面的utf8_decode函数,而NuSoap默认为true,因此,我们需要设置:

referer是php用来判断页面上级来源页面的一个超级变局变量了,我们可以使用referer来判断是从那个页面进入到此页面了,这样我们可以进行更好的跟踪了,下面我就来给各位朋友整理了几种伪造页面referer来源例子,希望例子能给各位朋友。

file_get_contents方法

 代码如下 复制代码

$opt=array('http'=>array('header'=>"Referer: $refer"));
$context=stream_context_create($opt);
$file_contents = file_get_contents($url,false, $context);

分析:

file_get_contents中stream_context_create就伪造来源的重要参数了,这个什么好说的非常的简单。

CURL方式

 代码如下 复制代码

$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, "http://www.111cn.net");
curl_setopt ($ch, CURLOPT_REFERER, "http://www.111cn.net/");
curl_exec ($ch);
curl_close ($ch);

分析:

curl伪造来源页面非常的简单这是它的优点了,所以我们只要在页面加上curl_setopt ($ch, CURLOPT_REFERER, "http://www.111cn.net/");就可以了。

SOCKET方式

 代码如下 复制代码

$server = 'www.111cn.net';
$host = 'www.111cn.net';
$target = 'index.php';
$referer = 'http://www.111cn.net/'; // Referer
$port = 80;
$fp = fsockopen($server, $port, $errno, $errstr, 30);
if (!$fp){
  echo "$errstr ($errno)\n";
}else{
$out = "GET $target HTTP/1.1\r\n";
$out .= "Host: $host\r\n";
$out .= "Referer: $referer\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)){
echo fgets($fp, 128);
}
fclose($fp);
}

友情提示:三种性能比对fsockopen是最好的哦。

我们再使用

 代码如下 复制代码

<?php
echo "<hr />";
echo $_SERVER["HTTP_REFERER"];
?>

你会发现获取到的就是我们的www.111cn.net了哦,当然为造地址可以自行设置哦。

页面转义单引号,双引号对于我们网站安全有很大的问题,我们经常会使用addslashes()和stripslashes()进行转义之后存入数据库了,这样可以防止sql注入了,下面来看看。

PHP页面中如果不希望出现以下情况:

单引号被转义为 \'

双引号被转义为 \"

那么可以进行如下设置以防止:

方法一:在php.ini中设置:magic_quotes_gpc = Off


方法二: $str=stripcslashes($str)

补充

1. 对于PHP magic_quotes_gpc=on的情况,

例子

 代码如下 复制代码

<?php

$str=$_POST['str'];

if(!get_magic_quotes_gpc()){//首先判断未开启

$newStr=addslashes($str);//然后用addslashes函数过滤

}

?>

我们可以不对输入和输出数据库的字符串数据作
addslashes()和stripslashes()的操作,数据也会正常显示。

如果此时你对输入的数据作了addslashes()处理,
那么在输出的时候就必须使用stripslashes()去掉多余的反斜杠。

2. 对于PHP magic_quotes_gpc=off 的情况

必须使用addslashes()对输入数据进行处理,但并不需要使用stripslashes()格式化输出
因为addslashes()并未将反斜杠一起写入数据库,只是帮助mysql完成了sql语句的执行

ZipArchive类是一个文件压缩解压类是一个php自来的zip类,我们可以直接简单创建一个类然后就能实现打包了,下面一聚教程小编给各位介绍一下吧,有需要了解的朋友可进入参考。

这里我采用的是php自带的ZipArchive类

a) 我们只需要new一个ZipArchive对象,然后使用open方法创建一个zip文件,接着使用addFile方法,将要打包的文件写入刚刚创建的zip文件中,最好还得记得关闭该对象。

b) 注意点:使用open方法的时候,第二个参数$flags是可选的,$flags用来指定对打开的zip文件的处理方式,共有四种情况

i.ZIPARCHIVE::OVERWRITE 总是创建一个新的文件,如果指定的zip文件存在,则会覆盖掉

ii. ZIPARCHIVE::CREATE如果指定的zip文件不存在,则新建一个

iii. ZIPARCHIVE::EXCL 如果指定的zip文件存在,则会报错  

iv.  ZIPARCHIVE::CHECKCONS

一、解压缩zip文件

 代码如下 复制代码

$zip = new ZipArchive;//新建一个ZipArchive的对象
/*
通过ZipArchive的对象处理zip文件
$zip->open这个方法的参数表示处理的zip文件名。
如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
*/
if ($zip->open('test.zip') === TRUE)
{
$zip->extractTo('images');//假设解压缩到在当前路径下images文件夹的子文件夹php
$zip->close();//关闭处理的zip文件
}

二、将文件压缩成zip文件

 代码如下 复制代码

$zip = new ZipArchive;
/*
$zip->open这个方法第一个参数表示处理的zip文件名。
第二个参数表示处理模式,ZipArchive::OVERWRITE表示如果zip文件存在,就覆盖掉原来的zip文件。
如果参数使用ZIPARCHIVE::CREATE,系统就会往原来的zip文件里添加内容。
如果不是为了多次添加内容到zip文件,建议使用ZipArchive::OVERWRITE。
使用这两个参数,如果zip文件不存在,系统都会自动新建。
如果对zip文件对象操作成功,$zip->open这个方法会返回TRUE
*/
if ($zip->open('test.zip', ZipArchive::OVERWRITE) === TRUE)
{
$zip->addFile('image.txt');//假设加入的文件名是image.txt,在当前路径下
$zip->close();
}

三、文件追加内容添加到zip文件

 

 代码如下 复制代码
$zip = new ZipArchive;
$res = $zip->open('test.zip', ZipArchive::CREATE);
if ($res === TRUE) {
$zip->addFromString('test.txt', 'file content goes here');
$zip->close();
echo 'ok';
} else {
echo 'failed';
}

例子

执行打包代码:
 

 代码如下 复制代码
import('ORG.Util.FileToZip');
 // 打包下载
 $cur_file =getcwd().'/dimg/2014052916/';
 $handler = opendir($cur_file); //$cur_file 文件所在目录
 $download_file = array();
 $i = 0;
 while( ($filename = readdir($handler)) !== false ) {
 if($filename != '.' && $filename != '..') {
 $download_file[$i++] = $filename;
 }
 }
 closedir($handler);
 $scandir=new traverseDir($cur_file,$save_path); //$save_path zip包文件目录
 $scandir->tozip($download_file);

FileToZip 类:
 

 代码如下 复制代码
<?php
/**
 * 遍历目录,打包成zip格式
 */
class traverseDir{
 public $currentdir;//当前目录
 public $filename;//文件名
 public $fileinfo;//用于保存当前目录下的所有文件名和目录名以及文件大小
 public $savepath;
 public function __construct($curpath,$savepath){
 $this->currentdir=$curpath;//返回当前目录
 $this->savepath=$savepath;//返回当前目录
 }
 //遍历目录
 public function scandir($filepath){
 if (is_dir($filepath)){
 $arr=scandir($filepath);
 foreach ($arr as $k=>$v){
 $this->fileinfo[$v][]=$this->getfilesize($v);
 }
 }else {
 echo "<script>alert('当前目录不是有效目录');</script>";
 }
 }
 /**
 * 返回文件的大小
 *
 * @param string $filename 文件名
 * @return 文件大小(KB)
 */
 public function getfilesize($fname){
 return filesize($fname)/1024;
 }
 
 /**
 * 压缩文件(zip格式)
 */
 public function tozip($items){
 $zip=new ZipArchive();
 $zipname=date('YmdHis',time());
 if (!file_exists($zipname)){
 $zip->open($savepath.$zipname.'.zip',ZipArchive::OVERWRITE);//创建一个空的zip文件
 for ($i=0;$i<count($items);$i++){
 $zip->addFile($this->currentdir.'/'.$items[$i],$items[$i]);
 }
 $zip->close();
 $dw=new download($zipname.'.zip',$savepath); //下载文件
 $dw->getfiles();
 unlink($savepath.$zipname.'.zip'); //下载完成后要进行删除
 }
 }
}
 
/**
 * 下载文件
 *
 */
class download{
 protected $_filename;
 protected $_filepath;
 protected $_filesize;//文件大小
 protected $savepath;//文件大小
 public function __construct($filename,$savepath){
 $this->_filename=$filename;
 $this->_filepath=$savepath.$filename;
 }
 //获取文件名
 public function getfilename(){
 return $this->_filename;
 }
 
 //获取文件路径(包含文件名)
 public function getfilepath(){
 return $this->_filepath;
 }
 
 //获取文件大小
 public function getfilesize(){
 return $this->_filesize=number_format(filesize($this->_filepath)/(1024*1024),2);//去小数点后两位
 }
 //下载文件的功能
 public function getfiles(){
 //检查文件是否存在
 if (file_exists($this->_filepath)){
 //打开文件
 $file = fopen($this->_filepath,"r");
 //返回的文件类型
 Header("Content-type: application/octet-stream");
 //按照字节大小返回
 Header("Accept-Ranges: bytes");
 //返回文件的大小
 Header("Accept-Length: ".filesize($this->_filepath));
 //这里对客户端的弹出对话框,对应的文件名
 Header("Content-Disposition: attachment; filename=".$this->_filename);
 //修改之前,一次性将数据传输给客户端
 echo fread($file, filesize($this->_filepath));
 //修改之后,一次只传输1024个字节的数据给客户端
 //向客户端回送数据
 $buffer=1024;//
 //判断文件是否读完
 while (!feof($file)) {
 //将文件读入内存
 $file_data=fread($file,$buffer);
 //每次向客户端回送1024个字节的数据
 echo $file_data;
 }
 
 fclose($file);
 }else {
 echo "<script>alert('对不起,您要下载的文件不存在');</script>";
 }
 }
}
[!--infotagslink--]

相关文章

  • 图解PHP使用Zend Guard 6.0加密方法教程

    有时为了网站安全和版权问题,会对自己写的php源码进行加密,在php加密技术上最常用的是zend公司的zend guard 加密软件,现在我们来图文讲解一下。 下面就简单说说如何...2016-11-25
  • ps怎么使用HSL面板

    ps软件是现在很多人都会使用到的,HSL面板在ps软件中又有着非常独特的作用。这次文章就给大家介绍下ps怎么使用HSL面板,还不知道使用方法的下面一起来看看。 &#8195;...2017-07-06
  • Plesk控制面板新手使用手册总结

    许多的朋友对于Plesk控制面板应用不是非常的了解特别是英文版的Plesk控制面板,在这里小编整理了一些关于Plesk控制面板常用的使用方案整理,具体如下。 本文基于Linu...2016-10-10
  • 使用insertAfter()方法在现有元素后添加一个新元素

    复制代码 代码如下: //在现有元素后添加一个新元素 function insertAfter(newElement, targetElement){ var parent = targetElement.parentNode; if (parent.lastChild == targetElement){ parent.appendChild(newEl...2014-05-31
  • 使用GruntJS构建Web程序之构建篇

    大概有如下步骤 新建项目Bejs 新建文件package.json 新建文件Gruntfile.js 命令行执行grunt任务 一、新建项目Bejs源码放在src下,该目录有两个js文件,selector.js和ajax.js。编译后代码放在dest,这个grunt会...2014-06-07
  • 使用percona-toolkit操作MySQL的实用命令小结

    1.pt-archiver 功能介绍: 将mysql数据库中表的记录归档到另外一个表或者文件 用法介绍: pt-archiver [OPTION...] --source DSN --where WHERE 这个工具只是归档旧的数据,不会对线上数据的OLTP查询造成太大影响,你可以将...2015-11-24
  • 如何使用php脚本给html中引用的js和css路径打上版本号

    在搜索引擎中搜索关键字.htaccess 缓存,你可以搜索到很多关于设置网站文件缓存的教程,通过设置可以将css、js等不太经常更新的文件缓存在浏览器端,这样访客每次访问你的网站的时候,浏览器就可以从浏览器的缓存中获取css、...2015-11-24
  • jQuery 1.9使用$.support替代$.browser的使用方法

    jQuery 从 1.9 版开始,移除了 $.browser 和 $.browser.version , 取而代之的是 $.support 。 在更新的 2.0 版本中,将不再支持 IE 6/7/8。 以后,如果用户需要支持 IE 6/7/8,只能使用 jQuery 1.9。 如果要全面支持 IE,并混合...2014-05-31
  • C#注释的一些使用方法浅谈

    C#注释的一些使用方法浅谈,需要的朋友可以参考一下...2020-06-25
  • MySQL日志分析软件mysqlsla的安装和使用教程

    一、下载 mysqlsla [root@localhost tmp]# wget http://hackmysql.com/scripts/mysqlsla-2.03.tar.gz--19:45:45-- http://hackmysql.com/scripts/mysqlsla-2.03.tar.gzResolving hackmysql.com... 64.13.232.157Conn...2015-11-24
  • 安装和使用percona-toolkit来辅助操作MySQL的基本教程

    一、percona-toolkit简介 percona-toolkit是一组高级命令行工具的集合,用来执行各种通过手工执行非常复杂和麻烦的mysql和系统任务,这些任务包括: 检查master和slave数据的一致性 有效地对记录进行归档 查找重复的索...2015-11-24
  • php语言中使用json的技巧及json的实现代码详解

    目前,JSON已经成为最流行的数据交换格式之一,各大网站的API几乎都支持它。我写过一篇《数据类型和JSON格式》,探讨它的设计思想。今天,我想总结一下PHP语言对它的支持,这是开发互联网应用程序(特别是编写API)必须了解的知识...2015-10-30
  • JavaScript动态创建div属性和样式示例代码

    1.创建div元素: Javascript代码 复制代码 代码如下: <scripttypescripttype="text/javascript"> functioncreateElement(){ varcreateDiv=document.createElement("div"); createDiv.innerHTML="Testcreateadiveleme...2013-10-13
  • PHP实现无限级分类(不使用递归)

    无限级分类在开发中经常使用,例如:部门结构、文章分类。无限级分类的难点在于“输出”和“查询”,例如 将文章分类输出为<ul>列表形式; 查找分类A下面所有分类包含的文章。1.实现原理 几种常见的实现方法,各有利弊。其中...2015-10-23
  • php类的使用实例教程

    php类的使用实例教程 <?php /** * Class program for yinghua05-2 * designer :songsong */ class Template { var $tpl_vars; var $tpl_path; var $_deb...2016-11-25
  • JS创建Tag标签的方法详解

    这篇文章主要介绍了JS创建Tag标签的方法,结合具体实例形式分析了javascript动态操作页面HTML元素实现tag标签功能的步骤与相关操作技巧,需要的朋友可以参考下...2017-06-15
  • 双冒号 ::在PHP中的使用情况

    前几天在百度知道里面看到有人问PHP中双冒号::的用法,当时给他的回答比较简洁因为手机打字不大方便!今天突然想起来,所以在这里总结一下我遇到的双冒号::在PHP中使用的情况!双冒号操作符即作用域限定操作符Scope Resoluti...2015-11-08
  • 浅析Promise的介绍及基本用法

    Promise是异步编程的一种解决方案,在ES6中Promise被列为了正式规范,统一了用法,原生提供了Promise对象。接下来通过本文给大家介绍Promise的介绍及基本用法,感兴趣的朋友一起看看吧...2021-10-21
  • 使用jquery修改表单的提交地址基本思路

    基本思路: 通过使用jquery选择器得到对应表单的jquery对象,然后使用attr方法修改对应的action 示例程序一: 默认情况下,该表单会提交到page_one.html 点击button之后,表单的提交地址就会修改为page_two.html 复制...2014-06-07
  • PHP mysql与mysqli事务使用说明 分享

    mysqli封装了诸如事务等一些高级操作,同时封装了DB操作过程中的很多可用的方法。应用比较多的地方是 mysqli的事务。...2013-10-02