了让初学者更容易理解,本文写的比较详细,所以如果你已是技术大拿,请直接绕过,以免浪费你的宝贵时间,谢谢。
相信现在很多网站都有文章功能,有文章就基本上少不了要有个列表页,网页设计师们对文章列表页的设计也是五花八门,各有各的创意,那我们就拿ThinkPHP旗下的极思维平台的列表页来说,极思维的目前的列表页是这样的:
大家可以看到,它的布局是块形式展现,每篇文章都是固定的布局,图片,标题,简介,如果说每篇文章在发布的时候都要单独的写个简介,单独上传个封面图,对编辑者来说就有些麻烦了,那我们就可以通过程序让它自动去抓取封面和简介,自动抓取缩略图我在之前的文章有讲过,大家可以去找下我之前的《ThinkPHP之自动获取文章内容中的第一张图片做为缩略图》这篇文章,今天我们主要讲如何自动抓取文章的部分内容作为文章的简介。
我们先来分析一下功能的实现原理,所谓简介,就是简单的说明一下这篇文章的主要内容,不涉及到排版,所以我们只需要纯文字,那么问题来了,之前我们在抓取缩略图的文章中我们也有说到,文章内容是由编辑器进行排版的,既然有排版样式,就必定要有HTML样式,只要保留文字就得把所有的HTML标签都去掉,那怎么去掉呢?
不用急,PHP有个专门去掉HTML的函数,这个函数就是 strip_tags ,我们先来看一下这个函数是什么样的:
在以上代码中可以看到,内容中有个 <b> 标签,<b> 标签的作用就是字体加粗,我们运行一下实例看下:
可以很明显的看到使用了 strip_tags 函数和没使用 strip_tags 函数的区别,那是不是直接在ThinkPHP中用这个函数就够了呢,写过文章的人都知道,文章会涉及到换行、空格等格式,strip_tags 函数只能去掉HTML标签,并不能去掉换行、空格等格式,那么怎么样才能去掉换行和空格呢,别担心,强大的PHP也有函数来处理这些东西的,PHP中有个正则替换函数叫做 ereg_replace ,这个函数可以把指定的字符换成我们想要的字符,那么我们的逻辑代码就可以这样写:
从上面的逻辑代码中,我们可以看到替换换行符中处理了三次替换,这是为什么呢,因为现在服务器系统有很多种,最常用的就有windows、linux两种系统,这两种系统的换行符是不同的,所以为了兼容不同的服务器,我们就多替换几次,其中 \r\n 是替换 linux 和 unix 系统的换行符,\n 是替换 windows 系统的换行符,\r 是替换苹果系统的换行符的。
处理好了HTML之后,接下来我们就要截取内容了,因为文章字数有多有少,既然是简介,那我们肯定就只要截取一小段文字了,比如只要50个字或者100个字这样,因为编程基本都是用英文编写的,对中文的识别较差,所以在编程计算长度时,一个中文汉字是算两个字符的,所以如果我们要截取50个中文的话,截取长度就是乘以二,那就是100了,其实这都不算什么问题,但是在实际过程中,按这样的方式去截取的话,遇到文章包含中英文的时候就可能会出现乱码的情况,为了避免出现乱码,我们可以用一个非PHP核心函数 mb_strlen 来解决,为什么说 mb_strlen 是非PHP核心函数呢,因为在使用 mb_strlen 函数前需要确保在 php.ini 中有加载 php_mbstring.dll,要不然就会出现 未定义函数 的问题,那我们就来把上面的代码改进一下,加上截取字数的功能,得到代码如下:
然后,我们以ThinkPHP3.2为例,把上面的自定义函数方法添加到ThinkPHP框架中核心公共函数目录(Common)里的 functions.php 文件的最后面即可。
调用方法为:{$vo.content|cutstr_html=###,100}
上面调用方法中的 ### 是表示文章内容,100为要截取的字数长度。
谢谢你的阅读,如果你有更好的方法或在应用过程中遇到问题可以在评论区提问或者直接私信我,我会定期回复,码农刘小桥与你一起学习,共同进步。
也不用羡慕隔壁laravel laraveldebugbar、ignition、whoops 异常报错时打开跳转编辑器功能。如今ThinkPHP也可以了(6和8)。只需要你安装相应扩展,配置一番即可。Vscode最简单。
composer require yangweijie/think-exception
.env 里 app_debug=true
将 app.show_error_msg 设为 true
// 显示错误信息
'show_error_msg' => true,
// 当前编辑器
'editor' => 'vscode',
最容易的,只需要安装时 选择下图的“将code注册为受支持的文件类型的编辑器”就行
需要安装GitHub - thecotne/subl-protocol: sublime text protocol插件
参考laravel-debugbar 中正确使用 ide phpstorm打开项目文件的方式 | Laravel China 社区 文章放置js 和 添加注册表即可
欢迎大家使用,反馈
对不同的WEB服务器,ThinkPHP V5需要的伪静态内容是不一样的,
而且在Apache服务器上,模块化运行与采用FCGI运行方式的伪静态也有差别
-----------apache、nginx、iis、安装TP5之Apache篇开始-----------
特别一提的地方(重要)
在Apache服务器上,采用模块化运行与采用FCGI运行方式的伪静态也是有差别的、
所以有的人在安装ThinkPHP V5的时候就会出现No input file specified.的错误提示
下面这个伪静态是Apache采用模块运行方式时需要配置的伪静态内容,详细的运行方式可查看我以往的博客内容
(如果您当前的Apache采用Fcgi模式运行PHP,那么这个伪静态就会出现“No input file specified.”的错误提示)
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L] </IfModule>
上面的伪静态为什么有的人能正常使用,而有的人使用确出现“No input file specified.”的提示呢?
那是因为Apache只有采用fastcgi模式的时候,才出现不能识别PATH_INFO的情况,所以在windows下很多人安装ThinkPHP V5的时候都没出现这个问题,因为大部分windows用户安装的Apache是采用模块化运行方式的,而在linux上以及在windows系统下采用FCGI运行模式的都出现了“No input file specified.”提示。
如果你采用FCGI运行方式的时候出现此类提示,只需要把
RewriteRule ^(.*)$ index.php/ [QSA,PT,L]
改写成
RewriteRule ^(.*)$ index.php [E=PATH_INFO:,QSA,PT,L] 即可,改写后的伪静态如下(注意E=PATH_INFO:)
<IfModule mod_rewrite.c> Options +FollowSymlinks -Multiviews RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [E=PATH_INFO:$1,QSA,PT,L] </IfModule>
友情提示:PHPWAMP支持多模式,主界面默认站点是模块化运行方式,站点管理是Fcgi模式,
所以主界面的默认站点可以直接使用ThinkPHP V5默认的伪静态,而站点管理需要使用修改后的伪静态。
选择相关设置切换php版本后选择这里启动Apache2.4
选择这里默认的三个版本都可以启动Apache2.4,这里选择的版本仅仅是默认站点的版本
默认站点采用的常见的模块运行方式,所以可以直接使用上面第一个未经改动的伪静态文件。
启动后在站点管理界面添加站点,复制上面修改过的伪静态进去就可以了,因为站点管理是FCGI模式
在添加站点的时候,网站根目录应该选择public文件夹,这样就可以打开默认的ThinkPHP V5页面了。
如果你在上个步骤使用默认的伪静态,由于站点管理是FCGI模式,那么就会出现下面的No input file specified.”提示
所以我们必须改用修改后的伪静态,启用修改后的伪静态就可以正常打开http://localhost:8033/index/index/index这个页面了
-----------apache、nginx、iis、安装TP5之nginx篇开始-----------
在Nginx服务器上安装ThinkPHP V5的伪静态如下所示
if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=/$1 last; break; }
具体流程如下图,点击菜单相关设置,然后我们先启用Nginx服务器
打开nginx站点管理添加站点,网站目录选择public文件夹,就不用在url后面添加public访问了
添加站点后,我们会发现添加的站点根目录自动生成了属于Nginx服务器的伪静态文件“nginx.htaccess”
打开此伪静态文件,里面默认集成了常见网站的伪静态,找到属于TP5的伪静态,去掉前面#号后即可(重启Nginx)
你也可以把里面默认的伪静态全部删掉,直接复制前面我提供的Nginx下TP5的伪静态也是可行的(设置须重启Nginx)
如果你的Nginx伪静态设置错误,通常访问如下路径“http://localhost:8088/index/index/index/”将会出现404错误
如果正确的设置了Nginx下TP5程序的伪静态,打开该页面才能正常显示
-----------apache、nginx、iis、安装TP5之iis篇开始-----------
在iis服务器上安装ThinkPHP V5的伪静态还需要额外的这几个步骤
1、服务器需要安装:URL Rewrite 下载地址可在微软官网自行搜索
2、在IIS的高版本下面可以配置web.Config,在中间添加rewrite节点:
加在 <system.webServer>里面就可以了
<rewrite> <rules> <rule name="OrgPage" stopProcessing="true"> <match url="^(.*)$" /> <conditions logicalGrouping="MatchAll"> <add input="{HTTP_HOST}" pattern="^(.*)$" /> <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" /> </rule> </rules> </rewrite>
具体步骤,打开PHPWAMP的相关设置,点击IIS站点管理
此IIS站点管理可以操作系统内置的IIS服务器,快速添加PHP站点,可以多个PHP版本同时运行
添加后的站点可以在phpwamp的iis站点管理进行修改,也可以在系统的iis管理器里面修改,通用。
添加一个iis站点,php版本任意选,而且还可以自定义php版本,支持32位/64位PHP任选。
添加站点后,就会发现添加的站点根目录自动生成了属于IIS服务器的伪静态文件“web.config”
添加网站后重启iis,然后访问路径http://localhost:8088/index/index/index会出现404,因为还没设置伪静态web.config文件
在设置伪静态web.config文件之前,我们必须先安装伪静态模块,在前面提供的urlrewrite2.exe文件下载地址下载后,
进行urlrewrite2.exe的安装,安装完成后需要重启动电脑,然后导入IIS服务器下TP5的伪静态即可,下面继续详细步骤
安装伪静态可能出现的原因与解决方案
如果安装伪静态时提示出现了已安装,你可以搜索以下文件,删掉“rewrite.dll”文件即可,该文件一般在C:\Windows\System32\inetsrv目录下
友情提示:安装伪静态后最好是重启一下电脑,如果安装伪静态过程中遇到任何问题,可按照此步骤重装伪静态模块
安装完伪静态后,我们点击此处打开系统的iis管理器
打开后就会发现如下图标,多了“URL重写”这个图标,说明安装好了伪静态模块。
安装伪静态模块成功之后,就可以在网站根目录的web.config文件里面添加上面的伪静态规则了,
早在前面我们添加站点的时候已经自动在站点根目录下面生成web.config文件了,如下图红框所示。
我们可以直接打开它,添加上面的伪静态内容即可,修改文件web.Config,
在中间添加rewrite节点,加在 <system.webServer>里面就可以了,如下图添加
保存后刷新http://localhost:8088/index/index/index,我们就发现能正常打开,不再出现404提示了。
至此,Nginx、Apache、IIS三大主流WEB服务器设置伪静态的详细过程讲解完毕,
如果按照操作出现错误,请多次熟读本文中的内容,不要只看图片,文字叙述才是重点。
*请认真填写需求信息,我们会在24小时内与您取得联系。