php写excel文件_原生php实现excel文件读写的方法分析

本文实例分析了原生php实现excel文件读写的方法。分享给大家供大家参考,具体如下:

最近在工作中遇到一个需求,需要将数据库中的数据导出到excel文件中,并下载excel文件。因为以前没做过,所以就百度了一下,网上说的大多是使用PHPExcel类来操作excel文件,这还要去下载这个类才能使用,而我只想使用原生的php,不想那么麻烦,好在也有网友说到关于原生php生成excel文件的方法,其实很简单,下面把我结合网上资料自己实践的代码分享一下。

一般我们这种导数据的操作都是通过用户在网页页面上点击某个按钮触发相应js方法,然后请求php接口来实现的,所以主要有两种方法来完成这种需求。

方法1:直接在js代码中使用window.open()打开php接口的url,即可将php生成的excel文件下载下来。

php接口代码如下:

$mysqli = mysqli_connect('localhost', 'root', '123456', 'test');

$sql = 'select * from country';

$res = mysqli_query($mysqli, $sql);

header("Content-type:application/vnd.ms-excel");

header("Content-Disposition:filename=country.xls");

echo "code\t";

echo "name\t";

echo "population\t\n";

if(mysqli_num_rows($res) > 0) {

while($row = mysqli_fetch_array($res)) {

echo $row['code']."\t";

echo $row['name']."\t";

echo $row['population']."\t\n";

}

}

方法2:php接口中先把生成的excel文件保存在服务器中,然后把文件路径返回给js,js再使用window.open()打开文件路径即可下载。

php接口代码如下:

$mysqli = mysqli_connect('localhost', 'root', '123456', 'test');

$sql = 'select * from country';

$res = mysqli_query($mysqli, $sql);

$file = fopen('./country.xls', 'w');

fwrite($file, "code\tname\tpopulation\t\n");

if(mysqli_num_rows($res) > 0) {

while($row = mysqli_fetch_array($res)) {

fwrite($file, $row['code']."\t".$row['name']."\t".$row['population']."\t\n");//这里写得不好,应该把所有文件内容组装到一个字符串中然后一次性写入文件。

}

}

fclose($file);

echo 'http://www.jtw.com/....../country.xls';//这里返回文件路径给js

两种方法很类似,都能实现将数据库中的数据导出到excel文件中并下载文件,最终文件截图如下:

04608c971eef1b2abc14f482bf1579be.png

如果有需要,还可以使用原生php对excel文件内容进行读取操作,这主要用于需要将excel文件中的数据导入到数据库中的情况。

代码如下:(这里仅展示将文件数据读取到一个数组中)

$path = './country.xls';

$file = fopen($path, 'r');

//标题行读取(第一行)

$row = fgets($file);

$row = explode("\t", $row);

$title = array();

foreach($row as $k => $v) {

$title[$k] = str_replace("\n", '', $v);

}

//内容读取

$data = array();

$count = 0;

while(!feof($file)) {

$row = fgets($file);

$row = explode("\t", $row);

if(!$row[0]) continue;//去除最后一行

foreach($title as $k => $v) {

$data[$count][$title[$k]] = $row[$k];

}

$count ++;

}

fclose($file);

echo '

';

print_r($data);

不过,使用原生php生成的excel文件,存在一个问题,就是每次编辑文件之后保存文件的时候总是会出现如下截图的问题:

598cb242c15119469890810c744d6b0b.png

也不知道是什么原因,大概是生成的文件本身存在一些问题吧。。。

而且使用原生php对生成的excel文件进行读取的时候会出现中文乱码等一些奇葩情况。所以,使用原生php生成excel文件最好仅在某种情况下使用:只是单纯地将数据从数据库导出到文件中方便查看,无需对文件进行修改,也无需对文件进行读取。这种情况使用原生php来生成excel足以满足需求,免去使用第三方类库来操作excel的麻烦。不过,若是生成之后的文件还有修改保存、读取数据的需求,那还是老老实实使用phpexcel等第三方类库来进行读写操作吧,可以避免很多让人纠结的问题。

希望本文所述对大家PHP程序设计有所帮助。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现最安全的文件上传需要考虑以下几个方面: 1. 文件类型过滤:只允许上传指定类型的文件,比如图片、文档、音频等,可以使用 MIME 类型或文件扩展名进行判断。 2. 文件大小限制:限制上传文件的大小,避免占用过多的服务器资源和网络带宽。 3. 防止文件覆盖:检查上传的文件名是否已经存在,如果存在则重命名或者提示用户重新上传。 4. 防止文件注入:对上传的文件进行严格的检查和过滤,避免上传恶意文件或包含恶意代码的文件。 下面是一个使用原生 PHP 实现文件上传的示例代码,包含了上述安全措施: ```php <?php // 允许上传的文件类型 $allowedTypes = ['jpg', 'jpeg', 'png', 'gif']; // 允许上传的文件大小,单位字节 $maxSize = 1024 * 1024 * 2; // 上传文件保存路径 $uploadPath = './uploads/'; if ($_SERVER['REQUEST_METHOD'] === 'POST') { // 检查上传文件是否存在且上传成功 if (isset($_FILES['file']) && $_FILES['file']['error'] === UPLOAD_ERR_OK) { // 获取上传文件的信息 $fileName = $_FILES['file']['name']; $fileType = pathinfo($fileName, PATHINFO_EXTENSION); $fileSize = $_FILES['file']['size']; $fileTmpName = $_FILES['file']['tmp_name']; // 检查文件类型是否允许上传 if (!in_array($fileType, $allowedTypes)) { die('不允许上传该类型的文件'); } // 检查文件大小是否超出限制 if ($fileSize > $maxSize) { die('文件大小超出限制'); } // 生成新的文件名,避免文件名冲突 $newFileName = uniqid() . '.' . $fileType; // 移动上传文件到指定目录 if (move_uploaded_file($fileTmpName, $uploadPath . $newFileName)) { echo '文件上传成功'; } else { die('文件上传失败'); } } else { die('上传文件不存在或上传失败'); } } ?> ``` 上述代码中,我们通过判断上传文件的类型、大小、以及是否存在来保证文件上传的安全性。同时,我们还使用了 `uniqid()` 函数生成了一个唯一的文件名,避免了文件名冲突的问题。最后,我们通过 `move_uploaded_file()` 函数将上传的文件移动到指定的目录,确保文件上传成功。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值