php

php下载utf8编码的csv,用excel打开乱码

服务器上有一个utf8编码的csv文件,经过php下载到本地之后,用excel打开,发现乱码了。原因是这个csv文件没有BOM头。 BOM头是放在UTF-8编码的文件的头部的三个字符(0xEF 0xBB 0xBF,即BOM)占用三个字节,用来标识该文件属于UTF-8编码。 所以在php里面下载utf8编码的csv的时候,需如下方代码所示,添加BOM头: $downloadUrl = '/home/nemo/firDir/test.csv'; $fileName = 'test.csv'; ini_set('memory_limit', '128M'); header('Content-type: application/

  • Nemo
    Nemo
1 min read
php

使用nginx的XSendfile提升php下载文件性能

我在之前一篇笔记里面写了如何用php下载文件,里面写了两种方法来下载文件 nginx配置直接try_files下载文件 php读取文件之后再输出 对于第二种方法,php-fpm和nginx的内存和IO情况都有飙升。 在传统的文件传输过程中,文件数据经历了以下步骤: 硬盘 -> 内核buffer -> 用户buffer -> socket相关缓冲区 -> 协议栈 而sendfile机制被开启之后,减少了一次文件copy,提升了文件传输性能,文件数据经历的步骤如下: 硬盘 -> 内核buffer -> socket相关缓冲区

  • Nemo
    Nemo
2 min read
php

php处理base64图片

php将base64转成图片 最近做了一个上传图片的功能。本来的需求是直接上传图片,就可以把图片当成是一个文件。后来又在界面上加了个图片剪裁的功能,前端说传base64比较方便,所以php这边需要将base64转成图片。 看以下示例代码,将base64字符串转成图片,存储起来。 $paramPicBase64 = $_POST['imageBase64']; // 取出图片base64字符串 $paramPicBase64 = str_replace('data:image/png;base64,', '', $paramPicBase64); $paramPicBase64 = str_replace('data:image/jpeg;base64,', '',

  • Nemo
    Nemo
1 min read
php

php读取excel文件

PHP读取excel文件 我用的是PHPExcel这个库,相关的方法网上都有介绍,我这里主要是记录一下使用过程中遇到的问题 按单元格读取 先来看一段示例代码,这段示例代码是使用PHPExcel按单元格读取excel的内容 $firstfilename = 'test.xlsx'; if ( !file_exists($firstfilename)) { echo "$firstfilename not exits"; exit; } // init excel reader $reader = new PHPExcel_Reader_Excel2007(); // 判断是xlsx还是xls文件 if ( !$reader->

  • Nemo
    Nemo
5 min read
php

php array_search

php array_search 在数组中搜索给定的值,如果成功则返回首个相应的键名 mixed array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) 第一个参数表示要查找的值,第二个参数表示数组,第三个参数表示是否严格比较类型 严格比较类型 vs 不严格比较类型的区别 看一下严格比较类型与不严格比较类型的区别 <?php $arr = ['0', 1, '2', '1']; $result = array_search('1',

  • Nemo
    Nemo
2 min read
php

php删除字符串最后一个字符

php删除字符串最后一个字符 方法一、substr 一般情况下,我用的是substr,关于substr的更多解释可以看官方手册 string substr ( string $string , int $start [, int $length ] ) 第一个参数是父字符串,第二个参数是子字符串开始的下标,第三个参数是子字符串的长度 $str = "Hello Nemo!"; $str2 = substr(str, 0, strlen($str) - 1); 上面这个方法是设置截取从0号下标开始的长度为strlen($str) -

  • Nemo
    Nemo
2 min read
php

safari下载文件自动加了html后缀

如何下载文件? 方法一、直接通过nginx下载静态文件 如果文件是保存在服务器上面的,可以直接用nginx下载文件 比如说可以供用户下载pdf文件,那么我的nginx配置可以是这样子的: location ~ /document/(.*)\.pdf$ { root /home/nemo/myfile; try_files /$uri 404; } 按照上面的配置,当我请求http://fbd.intelleeegooo.cc/document/test.pdf的时候,我服务器上的位于/home/nemo/myfile/document/test.pdf的这个文件就被下载了。

  • Nemo
    Nemo
7 min read
php

在php里面如何执行linux命令

php如何执行某个命令 ,官方手册在这里我们先从shell_exec来说如何使用shell_exec在php里面执行shell命令先来试一下,使用php执行某个shell命令,该命令是mkdir testdir。<?php $cmd = 'mkdir testdir'; shell_exec($cmd); 在这个php脚本执行之前,目录里面是这样子的:执行之后,目录里面是如下图所示,多了一个testdir文件夹,这是通过我们刚刚在php脚本里面执行shell命令生成的shell命令执行失败会如何?假如说执行shell命令的时候出错了,后面的php代码还能运行吗?看下面这个例子,我要执行的命令是读取并运行test.sh这个文件里面的内容,但是这个文件实际是不存在的。<?php $cmd = 'source test.sh';

  • Nemo
    Nemo
4 min read
php

php将md转成pdf

在之前一篇笔记里面讲到了安装pandoc来生成pdf文件,其实我在使用pandoc之前,来想过用php的第三方库来将md转成html,然后把html转换成pdf。 将md转成html 我用的php库是"erusev/parsedown": "^1.7",官方链接在这里 使用Parsedown::instance->text($mdStr)就能够将md转成html,如下方代码所示。md到html的转换耗时很短 $html = Parsedown::instance()->text($mdStr); 将html转成pdf 我用的是库是"

  • Nemo
    Nemo
2 min read
mysql

mysql 用户名长度限制导致php连接不上

mysql用户名长度的限制 最近遇到了一个小问题,但是耗费了很长时间来定位问题。 原因是,连接mysql的时候,一直报错说连接不上,具体是说Access denied for user 'xxxx_xxxx_xxxx@192.168.1.10' (using password:YES)。刚开始我以为是使用的第三方库的问题,排查后发现不是。后来我以为是我所在的网段或者我的机器出问题了,这也不是。 最后,发现这个报错信息里面的username不对,是被截断了的。上网一搜,是mysql的用户名太长了,导致连接不上。 在mysql里面,它是这样规定的: MySQL

  • Nemo
    Nemo
1 min read
php

namespace in php

php里面的namespace namespace以前学C++的时候有接触过,在OC里面因为没有命名空间一直被大家诟病,只能用前缀如AF、NS之类的区分开来,而php从5.3之后也加入了namespace。 namespace的引入就是为了解决类名重复、方法名重复的问题。毕竟你自己写代码还能注意不重名,但composer引入第三方库就未必了。所以namespace的重要作用就体现出来了。 namespace如何避免类名重复 假如说,有两个文件a.php,b.php,内容分别如下: a.php的内容 <?php class Helper { public function test() { echo '-lib1--class Helper function

  • Nemo
    Nemo
4 min read
php

时间相关整理

代码里有时候经常会进行一些与时间有关的操作,在这里整理一下关于时间相关的方法。 获取当前时间戳 time()以秒为单位,是一个int类型的unix时间戳 int(1514532263) microtime()是一个字符串,前半部分为小数部分,后半部分是整数部分 string(21) "0.03409500 1514532362" microtime(true)以秒为单位,是一个float类型的时间戳 float(1514532362.0341) 字符串转换成时间戳 strtotime('now')当前时间 int(1514532765) strtotime(

  • Nemo
    Nemo
1 min read
php

basename、pathinfo相关

我之前有两篇笔记,分别写了php里面timezone的设置、php乱码相关的知识。 在使用php函数basename的时候,遇到问题了,中文的文件名出不来。 这个问题,还是在使用菜鸟在线编辑器的时候用到的 比如说,我在它里面写上代码,但结果却不如人意。 如上图所示,我想要用basename输出一个文件的名字,但是它却没有输出中文名,只输出了后缀。 该用pathinfo也有同样的问题 这到底是怎么回事儿? 我有使用php cli形式,在我自己的机器上试了一下。 <?php $file = '/home/users/nemo/dir/中文.xls'; $info = pathinfo($file)

  • Nemo
    Nemo
4 min read
php

php-fpm与服务器502、504相关知识

上周报名了一个活动,结果对方服务器nginx 502了,有朋友进去了活动页面,我都没进得去!后来听说是php配置文件没配置好,导致了这个问题。 正好最近入了php的坑,就来学习一些php配置里面可能会导致服务器nginx 502的地方。 nginx 502 一般是以下几种情况: php-fpm进程没有启动,或者nginx的fastcgi_pass设置错误,导致nginx连不到php php worker进程不够,请求太多处理不过来 php-fpm执行超时,被kill掉,导致nginx与其连接被断开 nginx 504 一般是以下情况: 虽然php脚本还在执行,但nginx与上游通信时间超时。 下面就来以此解决这几个问题: 一、 php-fpm进程或者nginx fastcgi_pass配置

  • Nemo
    Nemo
8 min read
php

php乱码相关知识

最近遇到了一个问题,所以就把php相关的编码知识整理了一下。本文主要涉及php乱码相关知识 php代码文件的编码 有时候会在一些老代码里面看到乱码的中文注释,还挺抓狂的,索性没影响到代码逻辑。╮( ̄▽ ̄)╭ 当然最好不要在具体的代码逻辑里面写中文,不然乱码了就不太好了。 为了团队协作,php代码文件当然最好是是UTF-8编码。在phpstorm等IDE里面都可以设置。 浏览器中文显示乱码 上面说到,为了团队协作,php代码文件最好使用UTF-8编码,尽量减少在代码逻辑里面写中文。 但如果,要使用php输出一个html文件,不可避免里面会有中文。此时这个中文是UTF-8编码的。 举个例子,php输出一个html文件 <?php $str = '<html><head>

  • Nemo
    Nemo
7 min read
php

php-fpm的启动、重启

之前我的一片笔记里面讲到了FastCGI、php-fpm相关的知识,今天说一下php-fpm的启动、重启、关闭 启动php-fpm /usr/local/php/sbin/php-fpm 执行以上命令就能够启动php-fpm 可以用命令ps aux|grep php-fpm查看正在运行的php-fpm相关进程 重启php-fpm 以前php-fpm是可以通过/usr/local/php/sbin/php-fpm reload这种命令重启的,但是自从php-fpm被收编到官方源代码里面之后,这种方法就不管用了。 可以使用信号量来实现重启功能 首先用命令ps aux|grep php-fpm查看正在运行的php-fpm相关进程,结果如下: nemo

  • Nemo
    Nemo
1 min read