做网站大家首先想到的就是要怎么写代码,选择PHP还是asp,或者Java等语言,还有数据库使用MySQL、oracle还是access等等,其实完全没有那个担心,很多的个人站长并不会写代码,这是事实。只要掌握网站建设的基本方法,对于各种类型的开源网站系统都可以轻松驾驭,做出漂亮的网站。
01了解开源网站系统
开源网站系统就是开放源代码的意思,所有的代码均没有被加密,你可以任意修改,直到满足你的功能未知;开源系统一般不允许二次发布或销售,你自己使用,随便你怎么改都可以,但是不能把你改好的进行销售或再一次发布。
现在90%以上的开源网站系统使用的是PHP语言开发,主要是PHP免费,MySQL数据库也免费,PHP运行速度快等特点,一般情况下,网站语言选择PHP的就行。部分开源系统会有购买授权这一要求,个人仍然是可以免费使用的,如果是公司使用可以根据实际情况购买授权,比如你的网站已经稳定运营了,建议购买,如果是刚开始或者运营不稳定,暂缓购买授权也行(不买也可以,只不过为了减少不必要的麻烦买一个授权更放心)。
常用的开源网站系统,均为PHP+MySQL
dedecms:开源用来搭建资讯类,个人博客,企业网站,图片站,商品展示,商城,分类信息站等,功能强大,不可多得的内容管理系统,有授权,不买也可以使用;简单易学,入门很快。
discuz:简称DZ,做论坛就用他了,你现在看到的论坛网站几乎都是discuz系统搭建的,还可以用来搭建门户网站,dz应用中有很多的插件,能够实现分类信息、地方门户,商城网站,分销等很多功能;模板设计稍微复杂,只要稍加学习即可搞定。
WordPress:国外的一款使用很广泛的博客系统,可以用于搭建个人博客和企业网站。
还有很多不太知名的开源网站系统,如果不知道可以百度搜索。
02本地测试环境介绍
想要使用任何一款开源的网站系统,总是需要先在本地电脑上测试一下,所以配置一个完整的PHP环境就必不可少了,但是PHP环境的搭建优点复杂,于是有了很多的本地集成PHP环境软件,现在比较流行的有PHPstudy,PHPenv及wampserver等,大家可以百度搜索下载安装。
先将PHP集成环境在本地电脑上安装好,再去下载相应的网站源码,在集成环境上安装即可进行测试。
03模板制作或选择免费模板
开源网站系统都有一个共同的特点:模板是通用的。你可以去下载免费的模板直接使用,有条件的话也可以花钱购买一些付费的模板,直接套用就行。
如果是自己设计模板,需要懂得css和HTML相关的代码才行,这个是必须的基础,没有别的办法;其实也有简单的方法,可以去下载一些免费的模板,进行适当的修改即可成为自己的模板。很多仿站就是这么弄得,把别人的css和js文件下载下来,再进行标签套用即可。
04网站上线运营
将我们制作好的网站上线运营,需要购买服务器,可以根据自身的条件选择购买虚拟主机或是独立服务器,要是小型网站,使用虚拟空间就可以了,这个在购买的时候资讯空间商就行。
剩下的就是填充网站内容,优化和推广,获得用户或进行商品销售。网站设计制作是不是也很简单,只要会,一周上线一个网站其实是很容易的,想那些专门卖模板的网站,一套模板稍微修改一下就可以用于另一个网站,一天上线几个网站都可以。
php语言对于编程者来说,入门是相当快的,理解起来比较容易,但是有很多小的细节,很多想速成的小伙伴却没有认真地理解清楚,比如这个php当中3个的循环跳出语句,就是非常重要但又非常细小的细节,所谓细节决定成败,在这里一点也不为过了。
1、分清各自的含义
php中的3个跳出循环的语句分别是break,continue和exit这3个语句,他们都是在循环中经常使用到的。首先是break这个语句,它的作用是跳出这个循环,但是会执行循环后面的语句。然后是continue语句,它的作用是跳到下一次循环,继续。最后是exit语句的使用,它的作用是结束这个php脚本的运行,相当于程序停止了,不往下走了。
2、代码演示
break代码的演示:
for($i=1;$i<10;$i++){
echo $i;
if($i>3){
break;
}
}
echo ""<br/>我出来了";
运行的结果如下:
1234我出来了
分析:当这个$i大于3的时候,就执行了break语句,相当于就是跳出这个循环了,不执行这个循环了,但是循环后面的代码(echo ""<br/>我出来了";)继续执行。
continue代码演示:
for($i=1;$i<10;$i++){
echo $i;
if($i>3){
echo "请继续";
continue;
}
}
echo "<br/>我出来了";
运行结果如下:
1234请继续5请继续6请继续7请继续8请继续9请继续我出来了
分析:当$i大于3的时候,执行if里面的语句,continue在内,也就是直接进入了下一次的循环,知道循环条件为假,循环后面的语句(echo ""<br/>我出来了";)依然执行。
exit的代码演示:
for($i=1;$i<10;$i++){
echo $i;
if($i>3){
exit;
}
}
echo "<br/>我出来了";
运行结果:
1234
分析:当$i>3的时候,遇到了exit这个语句,就相当于停止了php的脚本的运行,所以后面的循环也停止了,甚至循环后面的代码块也不执行了(echo ""<br/>我出来了";)。
总结:以上就是对于php中这3个跳出的循环语句的小小的演示和对比,得出了他们的区别,希望对小伙伴们有帮助!
本文主要介绍PHP-X内置函数的使用,在PHP扩展开发中,会经常用到这些内置函数,PHP-X的封装,使得调用这些函数像PHP代码一样简单。
数据库是编程的核心内容,在使用php做网站的过程中,固然要与数据库打交道,那么在php中,怎样来创建一个数据库呢?下面我们就一起来了解一下吧。
1、创建一个函数
我在这里是作为演示实例,所以没有用框架,用的是原生的,打开编辑器,新建一个文件,然后再文件里面,先新建一个函数,这里命名是create_data,接下来我们将在这个函数里面来写php怎样创建一个数据库?
2、登陆信息
要想创建数据库或者是对数据库的其他操作,都必须先连接数据库,先设置好用户名,主机名,密码这三个变量:
$Username="root";
$Password="";
$servernmae="localhost";
3、连接数据库
登陆信息创建好之后,我们就来连接数据库了,我这里使用的是mysqli的连接方式:
$connect=new mysqli($servernmae,$Username,$Password);
4、创建数据库
如果数据库连接成功的话,我们就开始创建数据库,创建数据库的sql语句格式是“create database +要创建的数据库名”,例子如下:
$sql="create database ceshi";
然后是执行这个sql语句:
if($connect->query($sql)){
echo "successful!";
}
else{
echo $connect->error;
}
5、访问测试。
开启本地的服务器和mysql服务器,然后在浏览器中输入刚才那个文件的地址进行访问,结果如下:
完整代码如下:
function create_data(){
$Username="root";
$Password="";
$servernmae="localhost";
$connect=new mysqli($servernmae,$Username,$Password);
if($connect){
$sql="create database ceshi";
if($connect->query($sql)){
echo "successful!";
}
else{
echo $connect->error;
}
}
}
create_data();
在php中有很多的过滤,可以对输入的字符串进行过滤,同时也可以对邮件地址进行过滤,接下来我要讲的是php中的3种高级过滤,在开发中很实用。
第一种:过滤数值范围
在php经常要接收各种数据,其中数值是非常普遍的一种,我们接收到的数值并不是多大都行的,无用的数据对于我们的数据库来说就是浪费资源,所以在接收数据的时候,有必要对数字的范围进行过滤。
对数字的范围进行过滤这里需要用到的是FILTER_VALIDATE_INT这个关键字以及它的附加条件,步骤如下:
1、新建一个变量。
2、通过filter_var函数对这个变量进行过滤,过滤的根据是FILTER_VALIDATE_INT,附加条件是数字的最大值和最小值。例如:filter_var($shuzi,FILTER_VALIDATE_INT,array("options"=>array("min_range"=>$min,"max_range"=>$max))。
3、最后就是根据过滤的结果给出相应的提示信息。
第二种:对ipv6地址进行过滤。
如今ipv4地址已经用完了,逐渐开始使用ipv6地址,在接收这类IP地址的时候,我们很可能就会遇到ipv6这样的地址,针对这样的地址,我们借用FILTER_VALIDATE_IP,FILTER_FLAG_IPV6这两个条件来进行过滤。实例代码如下:
$ipv6="2004:0db9:89a3";
$panduan=filter_var($ipv6,FILTER_VALIDATE_IP,FILTER_FLAG_IPV6);
if($panduan){
echo "这是合法的ipv6地址";
}
else{
echo "这个ipv6地址不合法";
}
第三种:对查询语句的过滤。
在接收数据的时候,我们不能防止用户输入什么内容,有些用户就故意在输入信息的时候,搞sql注入,在网址上添加查询语句,这样的语句我们是要拒绝接收的,所以,在接收网址的时候,对它进行过滤是非常有必要的,判断地址中是否包含了查询语句。
判断是否包含查询语句,我们可以通过FILTER_VALIDATE_URL和FILTER_FLAG_QUERY_REQUIRED这两个关键字来实现,具体代码如下:
$chaxun="http://www.nihao select * from b hello";
$panduan=filter_var($chaxun,FILTER_VALIDATE_URL,FILTER_FLAG_QUERY_REQUIRED);
if($panduan){
echo "url地址是不合法的";
}
else{
echo "url地址是合法的";
}
以上就是关于3种php高级过滤,有兴趣的朋友可以了解一下,同时欢迎提出宝贵的意见和建议。
Laravel被称为“全栈”式框架,因为它能够处理从网络服务到数据库管理、HTML生成的一切事情,垂直集成的web开发环境给开发者提供了更好的体验。
开发人员可以通过命令行工具,生成和管理Laravel项目环境。Laravel附带了一个名为Artisan的优秀的命令行工具,它提供了一些开发过程中有用的命令用,可以用来生成框架代码和数据库管理。它是基于强大的Symfony Console 组件开发的。
Laravel的目标是给开发者创造一个愉快的开发过程,并且不牺牲应用的功能性。快乐的开发者才能创造最棒的代码!为了这个目的,我们博取众框架之长处集中到Laravel中,这些框架甚至是基于Ruby on Rails、ASP.NET MVC、和Sinatra等开发语言或工具的。
Laravel是易于理解并且强大的,它提供了强大的工具用以开发大型、健壮的应用。杰出的IoC、数据库迁移工具和紧密集成的单元测试支持,这些工具赋予你构建任何应用的能力。
目录结构
这是所有laravel项目具有基本上相同的目录结构,其中的每个文件都具有指定的地方。通过对目录结构的约定,确保你是按照“laravel方式”来工作。
正如你看到的,laravel项目下面有4个文件夹:app、bootstrap、public、vendor,这4个文件夹下面又有很多个子文件夹,当你第一次看到这么丰富的文件夹内容时,是不是觉得很有压力?没关系,我们会逐一的来了解不同的文件夹。
app 包含了站点的controllers(控制器),models(模型),views(视图)和assets(资源)。这些是网站运行的主要代码,你会将你大部分的时间花在这个目录里。
bootstrap 用来存放系统启动时需要的文件,这些文件会被如index.php这样的文件调用。
public 这个文件夹是唯一外界可以看到的web服务器的目录。它含有laravel框架核心的引导文件index.php,这个目录也可用来存放任何可以公开的静态资源,如css,Javascript,images等
vender
app目录
正如上面提到的,所有laravel中有趣的事情都会产生在app目录,让我们多了解一些里面的内容。
我们通过上面的表格可以看到,只要花一些心思在建立和命名的文件上,就能得到一个具有良好文件系统的结构化的应用。
模型-视图-控制器(MVC)
让我们更深一步了解如何建立laravel应用。你可能已经注意到,app目录下面有三子目录:models,views,controllers。这是表明了laravel是model-view-controller(MVC)架构模式,它将“业务逻辑”与图形用户界面相关的输入和显示逻辑(GUI)分离。在laravel Web应用中,业务逻辑通常由数据模型(如用户,博客文章)组成,GUI则只是一个浏览器中的页面。MVC设计模式在Web的开发领域中非常受欢迎。
MVC模式的三个要素:
模型(model)视图(view)控制器(controller)Laravel的响应流程
一个典型的laravel应用程序由上面提到的MVC组成
当访问一个laravel应用程序时,浏览器发送一个请求,由Web服务器接收并传递到laravel的路由引擎。该laravel路由器接收到请求后,根据配置重定向到相应的控制器类的方法。
然后由控制器类接管。在某些情况下,控制器将立即渲染一个视图,这是一个模板,将被转换成HTML并且发送回浏览器。更普遍的动态网站,控制器与模型进行交互,与数据库进行通信。调用模型后,控制器呈现最终视图(HTML、CSS和图像)并返回完整的web页面到用户的浏览器。
Laravel提倡模型、视图和控制器,应保持完全独立的存储单独的文件在不同的目录。这就是laravel的目录结构发挥作用的地方。
像MVC这样的设计模式的产生,就是为了让开发者的工作更加轻松。这就是Laravel比那些不用任何模式的PHP厉害的地方。如果这种讨论你现在感觉很抽象,不用担心!当你开始用Laravel工作,你都不会意识到你是在一种设计模式中工作。过一段时间后,就会变得自然了。
数据模型
数据模型是任何应用程序的基础,它建立了应用程序的业务逻辑。每一块数据通过使用一个数据库表表示。laravel提供了一些技术来简化对数据库的访问。
Laravel通过将数据库中的表行转成能被轻松操纵的PHP对象,来连接应用程序的数据模型和数据库表。它还使您能够执行业务规则,描述在应用程序中不同的数据模型之间的关系等。例如,一个人的家庭关系可以用Laravel Eloquent OR / M描述如下:
全选复制放进笔记class Person extends Eloquent
{
public function mother()
{
return $this->belongsTo('Mother');
}
public function father()
{
return $this->belongsTo('Father');
}
public function spouse()
{
return $this->hasOne('Spouse');
}
public function sisters()
{
return $this->hasMany('Sister');
}
public function brothers()
{
return $this->hasMany('Brother');
}
}
近几天,冠状病毒感染者确诊人数逐渐降低,但聚众上课仍有一定风险,因此教育部决定,延缓中小学生假期时长……线下教育的发展陷入停滞期,这对于在线教育直播系统而言,则无疑是个好消息,尽管线下教学机构,目前无力支持学生上课,但在线教育直播系统,恰好可以弥补这一空缺,为教育事业添砖加瓦。
也因此,不少人开始关注在线教育行业,或者开始了解直播系统搭建,做直播系统开发就离不开php直播系统源码,那么问题来了,php直播系统源码中会有哪些坑?我们一个个的来说。
首先是建议大家购买开源直播系统源码,比如安卓端推荐Java开发语言编写,iOS系统推荐oc语言编写,web端推荐php,小程序则推荐使用小程序独有的原生开发语言,开源系统的优势在于后期能够以较低成本进行软件开发工作,毕竟软件更新总是要实时更新才能跟得上时代发展的潮流。
其次便是建议多端互通,目前教育直播系统常用的几个端有安卓端、iOS端和微信端,安卓端和iOS端可用性更高,由于微信的限制,很多功能无法在微信端进行显示,但是在APP端是毫无限制的。
微信端的优势是很多不愿意下载APP的用户可以直接在微信上进行观看,并且微信有其庞大的私域流量,可以为APP进行引流
在直播功能上,由于目前教育直播系统的火爆,很多之前做过其他类型直播系统的公司,在娱乐直播源码的基础上做开发,做的“四不像”,其实这样是很不负责的,上一篇文章里我曾写过教育直播系统和娱乐直播系统的区别,这里就不多加赘述了,总结一下上篇文章的关键点,教育直播系统没有娱乐直播系统里的横幅、弹幕、进场特效等花里胡哨的功能,连评论区都是划分好的,哪边是问答区,哪边是学生自由讨论区,老师有白板可以在线书写,也可以制作PPT,讲PPT,还可以用纯语音或纯视频的方式来为大家进行教育教学,而这些,是娱乐直播系统所不具备的。
除此之外,教育直播系统肯定还会有如课件题库,知识点编撰汇总等文本教材,在教育直播系统里,它是可以被教师从独立后台里进行添加的,每个老师都会有自己独立的后台,方便梳理自己的上课结构、知识链条等,这点很重要。而娱乐直播系统的主播则不会有这种独立系统。
说到底,教育直播系统是独一无二的系统,无法像直播带货系统、直播短视频系统等系统一样,直接嵌入娱乐直播系统中,它是不同的。
以上便是本文全部内容,本文为原创文章,转载请注明出处为 驱动号作者云豹直播系统
作为一个PHP开发者,现在是一个令人激动的时刻。每天有许许多多有用的库分发出来,在Github上很容易发现和使用这些库。下面是我曾经遇到过最酷的24个库。你最喜欢的库没有在这个列表里面?那就在评论中分享吧!1. Dispatch – 微框架Dispatch是一个PHP小框架。它并没有给你完整的MVC设置,但你可以定义URL规则和方法,以便更好组织应用程序。这对API、简单的站点或原型来说是完美的。
//包含库
include 'dispatch.php';
// 定义你的路由
get('/greet', function () {
//渲染视图
render('greet-form');
});
//post处理
post('/greet', function () {
$name = from($_POST, 'name');
// render a view while passing some locals
render('greet-show', array('name' => $name));
});
// serve your site
dispatch();
你可以匹配特定类型的HTTP请求和路径,渲染视图或做更多事情。如果你合并Dispatch和其他框架,那你就可以拥有一个相当强大并且轻量级的程序!2. Klein – PHP快如闪电的路由Klein是另一款针对PHP5.3+版本的轻量级路由库。虽然它有一些比Dispatch冗长的语法,但它相当快。这有一个例子:
respond('/[:name]', function ($request) {
echo 'Hello ' . $request->name;
});
你也可以定制来指定HTTP方法和使用正则表达式作为路径。
respond('GET', '/posts', $callback);
respond('POST', '/posts/create', $callback);
respond('PUT', '/posts/[i:id]', $callback);
respond('DELETE', '/posts/[i:id]', $callback);
//匹配多种请求方法:
respond(array('POST','GET'), $route, $callback);
//你或许也想在相同的地方处理请求
respond('/posts/[create|edit:action] /[i:id] ', function ($request, $response) {
switch ($request->action) {
// do something
}
});
对于小型项目来说这是很棒的,但当你把一个像这样的库用于大型应用时,你不得不遵守规矩,因为你的代码可能很快就变得不可维护。所以你最好搭配一个像Laravel或者CodeIgniter这样完全成熟的框架。3. Ham – 带缓存的路由库Ham也是一款轻量级的路由框架,但是它利用缓存甚至获得了更快的速度。它通过把任何I/O相关的东西缓存进XCache/APC。下面是一个例子:
require '../ham/ham.php';
$app = new Ham('example');
$app->config_from_file('settings.php');
$app->route('/pork', function($app) {
return "Delicious pork.";
});
$hello = function($app, $name='world') {
return $app->render('hello.html', array(
'name' => $name
));
};
$app->route('/hello/<string>', $hello);
$app->route('/', $hello);
$app->run();
这个库要求你至少安装了XCache和APC其中的一个,这可能意味着,在大多数主机提供商提供的主机上它可能用不了。但是如果你拥有一个安装它们其一的主机,或者你可以操控你的web服务器,你应该尝试这款最快的框架。4. Assetic – 资源管理Assetic是一个PHP的资源管理框架,用于合并和减小了CSS/JS资源。下面是例子。
use Assetic\Asset\AssetCollection;
use Assetic\Asset\FileAsset;
use Assetic\Asset\GlobAsset;
$js = new AssetCollection(array(
new GlobAsset('/path/to/js/*'),
new FileAsset('/path/to/another.js'),
));
//当资源被输出时,代码会被合并
echo $js->dump();
以这种方式合并资源是一个好主意,因为它可以加速站点。不仅仅总下载量减小了,也消除了大量不必要的HTTP请求(这是最影响页面加载时间的两件事)5. ImageWorkshop – 带层的图片处理ImageWorkshop是一个让你操控带层图片的开源库。借助它你可以重定义尺寸、裁剪、制作缩略图、打水印或做更多事情。下面是一个例子:
// 从norway.jpg图片初始化norway层
$norwayLayer = ImageWorkshop::initFromPath('/path/to/images/norway.jpg');
// 从watermark.png图片初始化watermark层(水印层)
$watermarkLayer = ImageWorkshop::initFromPath('/path/to/images/watermark.png');
$image = $norwayLayer->getResult(); // 这是生成的图片!
header('Content-type: image/jpeg');
imagejpeg($image, null, 95); // We choose to show a JPG with a quality of 95%
exit;
ImageWorkshop被开发用于使一些PHP中最通用的处理图片的案例简化,如果你需要一些更强大的东西,你应该看下Imagine library!6. Snappy – 快照/PDF库Snappy是一个PHP5库,可以生成快照、URL、HTML、PDF。它依赖于wkhtmltopdf binary(在Linux,Windows和OSX上都可用)。你可以像这样使用它们:
require_once '/path/to/snappy/src/autoload.php';
use Knp\Snappy\Pdf;
//通过wkhtmltopdf binary路径初始化库
$snappy = new Pdf('/usr/local/bin/wkhtmltopdf');
//通过把Content-type头设置为pdf来在浏览器中展示pdf
header('Content-Type: application/pdf');
header('Content-Disposition: attachment; filename="file.pdf"');
echo $snappy->getOutput('http://www.github.com');
要记得,你的主机提供商可能不允许调用外部二进制程序。7. Idiorm – 轻量级ORM库Idiorm是个人之前在本网站教程中用过最喜爱的一款。它是一款轻量级的ORM库,一个建立在PDO之上的PHP5查询构造器。借助它,你可以忘记如何书写乏味的SQL:
$user = ORM::for_table('user')
->where_equal('username', 'j4mie')
->find_one();
$user->first_name = 'Jamie';
$user->save();
$tweets = ORM::for_table('tweet')
->select('tweet.*')
->join('user', array(
'user.id', '=', 'tweet.user_id'
))
->where_equal('user.username', 'j4mie')
->find_many();
foreach ($tweets as $tweet) {
echo $tweet->text;
}
Idiorm有一个姊妹库叫Paris,Paris是一个基于Idiorm的Active Record实现。8. Underscore – PHP的工具腰带Underscore是原始Underscore.js的一个接口 – Javascript应用的工具腰带。PHP版本没有让人失望,而且支持了几乎所有原生功能。下面是一些例子:
__::each(array(1, 2, 3), function($num) { echo $num . ','; }); // 1,2,3,
$multiplier = 2;
__::each(array(1, 2, 3), function($num, $index) use ($multiplier) {
echo $index . '=' . ($num * $multiplier) . ',';
});
// prints: 0=2,1=4,2=6,
__::reduce(array(1, 2, 3), function($memo, $num) { return $memo + $num; }, 0); // 6
__::find(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // 2
__::filter(array(1, 2, 3, 4), function($num) { return $num % 2 === 0; }); // array(2, 4)
这个库也支持链式语法,这使得它更为强大。9. Requests – 简单HTTP请求Requests是一个简化HTTP请求的库。如果你和我一样,几乎从来都记不住传递给Curl的各种各样的参数,那么它就是为你准备的:
$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);
var_dump($request->status_code);
// int(200)
var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"
var_dump($request->body);
// string(26891) "[…]"
借助这个库,你可以发送HEAD、GET、POST、PUT、DELTE和PATCH HTTP请求,你可以通过数组添加文件和参数,并且可以访问所有相应数据。10. Buzz – 简单的HTTP请求库Buzz是另一个完成HTTP请求的库。下面是一个例子:
$request = new Buzz\Message\Request('HEAD', '/', 'http://google.com');
$response = new Buzz\Message\Response();
$client = new Buzz\Client\FileGetContents();
$client->send($request, $response);
echo $request;
echo $response;
因为它缺乏文档,所以你不得不阅读源码来获知它支持的所有参数。11. Goutte – Web抓取库Goutte是一个抓取网站和提取数据的库。它提供了一个优雅的API,这使得从远程页面上选择特定元素变得简单。
require_once '/path/to/goutte.phar';
use Goutte\Client;
$client = new Client();
$crawler = $client->request('GET', 'http://www.symfony-project.org/');
//点击链接
$link = $crawler->selectLink('Plugins')->link();
$crawler = $client->click($link);
//使用一个类CSS语法提取数据
$t = $crawler->filter('#data')->text();
echo "Here is the text: $t";
12. Carbon – DateTime 库Carbon 是 DateTime API 的一个简单扩展。
printf("Right now is %s", Carbon::now()->toDateTimeString());
printf("Right now in Vancouver is %s", Carbon::now('America/Vancouver'));
$tomorrow = Carbon::now()->addDay();
$lastWeek = Carbon::now()->subWeek();
$nextSummerOlympics = Carbon::createFromDate(2012)->addYears(4);
$officialDate = Carbon::now()->toRFC2822String();
$howOldAmI = Carbon::createFromDate(1975, 5, 21)->age;
$noonTodayLondonTime = Carbon::createFromTime(12, 0, 0, 'Europe/London');
$endOfWorld = Carbon::createFromDate(2012, 12, 21, 'GMT');
//总是以UTC对比
if (Carbon::now()->gte($endOfWorld)) {
die();
}
if (Carbon::now()->isWeekend()) {
echo 'Party!';
}
echo Carbon::now()->subMinutes(2)->diffForHumans(); // '2分钟之前'
13. Ubench – 微型基准库Ubench 是一个用于评测PHP代码的微型库,可监控(代码)执行时间和内存使用率。下面是范例:
use Ubench\Ubench;
$bench = new Ubench;
$bench->start();
//执行一些代码
$bench->end();
//获取执行消耗时间和内存
echo $bench->getTime(); // 156ms or 1.123s
echo $bench->getTime(true); // elapsed microtime in float
echo $bench->getTime(false, '%d%s'); // 156ms or 1s
echo $bench->getMemoryPeak(); // 152B or 90.00Kb or 15.23Mb
echo $bench->getMemoryPeak(true); // memory peak in bytes 内存峰值
echo $bench->getMemoryPeak(false, '%.3f%s'); // 152B or 90.152Kb or 15.234Mb
//在结束标识处返回内存使用情况
echo $bench->getMemoryUsage(); // 152B or 90.00Kb or 15.23Mb
(仅)在开发时运行这些校验是一个好主意。14. Validation – 输入验证引擎Validation 声称是PHP库里最强大的验证引擎。但是,它能名副其实吗?看下面:
use Respect\Validation\Validator as v;
//简单验证
$number = 123;
v::numeric()->validate($number); //true
//链式验证
$usernameValidator = v::alnum()->noWhitespace()->length(1,15);
$usernameValidator->validate('alganet'); //true
//验证对象属性
$user = new stdClass;
$user->name = 'Alexandre';
$user->birthdate = '1987-07-01';
//在一个简单链中验证他的属性
$userValidator = v::attribute('name', v::string()->length(1,32))
->attribute('birthdate', v::date()->minimumAge(18));
$userValidator->validate($user); //true
你可以通过这个库验证你的表单或其他用户提交的数据。除此之外,它内置了很多校验,抛出异常和定制错误信息。15. Filterus – 过滤库Filterus是另一个过滤库,但它不仅仅可以验证,也可以过滤匹配预设模式的输出。下面是一个例子:
$f = Filter::factory('string,max:5');
$str = 'This is a test string';
$f->validate($str); // false
$f->filter($str); // 'This '
Filterus有很多内建模式,支持链式用法,甚至可以用独立的验证规则去验证数组元素。16. Faker – 假数据生成器Faker 是一个为你生成假数据的PHP库。当你需要填充一个测试数据库,或为你的web应用生成测试数据时,它能派上用场。它也非常容易使用:
//引用Faker 自动加载器
require_once '/path/to/Faker/src/autoload.php';
//使用工厂创建来创建一个Faker\Generator实例
$faker = Faker\Factory::create();
//通过访问属性生成假数据
echo $faker->name; // 'Lucy Cechtelar';
echo $faker->address;
// "426 Jordy Lodge
// Cartwrightshire, SC 88120-6700"
echo $faker->text;
// Sint velit eveniet. Rerum atque repellat voluptatem quia ...
只要你继续访问对象属性,它将继续返回随机生成的数据。17. Mustache.php – 优雅模板库Mustache是一款流行的模板语言,实际已经在各种编程语言中得到实现。使用它,你可以在客户端或服务段重用模板。 正如你猜得那样,Mustache.php 是使用PHP实现的。
$m = new Mustache_Engine;
echo $m->render('Hello {{planet}}', array('planet' => 'World!')); // "Hello World!"
建议看一下官方网站Mustache docs 查看更多高级的例子。18. Gaufrette – 文件系统抽象层Gaufrette是一个PHP5库,提供了一个文件系统的抽象层。它使得以相同方式操控本地文件,FTP服务器,亚马逊 S3或更多操作变为可能。它允许你开发程序时,不用了解未来你将怎么访问你的文件。
use Gaufrette\Filesystem;
use Gaufrette\Adapter\Ftp as FtpAdapter;
use Gaufrette\Adapter\Local as LocalAdapter;
//本地文件:
$adapter = new LocalAdapter('/var/media');
//可选地使用一个FTP适配器
// $ftp = new FtpAdapter($path, $host, $username, $password, $port);
//初始化文件系统
$filesystem = new Filesystem($adapter);
//使用它
$content = $filesystem->read('myFile');
$content = 'Hello I am the new content';
$filesystem->write('myFile', $content);
也有缓存和内存适配器,并且随后将会增加更多适配器。19. Omnipay – 支付处理库Omnipay是一个PHP支付处理库。它有一个清晰一致的API,并且支持数十个网关。使用这个库,你仅仅需要学习一个API和处理各种各样的支付处理器。下面是一个例子:
use Omnipay\CreditCard;
use Omnipay\GatewayFactory;
$gateway = GatewayFactory::create('Stripe');
$gateway->setApiKey('abc123');
$formData = ['number' => '4111111111111111', 'expiryMonth' => 6, 'expiryYear' => 2016];
$response = $gateway->purchase(['amount' => 1000, 'card' => $formData]);
if ($response->isSuccessful()) {
//支付成功:更新数据库
print_r($response);
} elseif ($response->isRedirect()) {
//跳转到异地支付网关
$response->redirect();
} else {
//支付失败:向客户显示信息
exit($response->getMessage());
}
使用相同一致的API,可以很容易地支持多种支付处理器,或在需要时进行切换。20. Upload – 处理文件上传Upload是一个简化文件上传和验证的库。上传表单时,这个库会校验文件类型和尺寸。
$storage = new \Upload\Storage\FileSystem('/path/to/directory');
$file = new \Upload\File('foo', $storage);
//验证文件上传
$file->addValidations(array(
//确保文件类型是"image/png"
new \Upload\Validation\Mimetype('image/png'),
//确保文件不超过5M(使用"B","K","M"或者"G")
new \Upload\Validation\Size('5M')
));
//试图上传文件
try {
//成功
$file->upload();
} catch (\Exception $e) {
//失败!
$errors = $file->getErrors();
}
它将减少不少乏味的代码。21. HTMLPurifier – HTML XSS 防护HTMLPurifier是一个HTML过滤库,通过强大的白名单和聚集分析,保护你代码远离XSS攻击。它也确保输出标记符合标准。 (源码在github上)
require_once '/path/to/HTMLPurifier.auto.php';
$config = HTMLPurifier_Config::createDefault();
$purifier = new HTMLPurifier($config);
$clean_html = $purifier->purify($dirty_html);
如果你的网站允许用户提交 HTML 代码,不修改就展示代码的话,那这时候就是用这个库的时候了。22. ColorJizz-PHP – 颜色操控库ColorJizz是一个简单的库,借助它你可以转换不同的颜色格式,并且做简单的颜色运算
use MischiefCollective\ColorJizz\Formats\Hex;
$red_hex = new Hex(0xFF0000);
$red_cmyk = $hex->toCMYK();
echo $red_cmyk; // 0,1,1,0
echo Hex::fromString('red')->hue(-20)->greyscale(); // 555555
它已经支持并且可以操控所有主流颜色格式了23. PHP Geo – 地理位置定位库phpgeo是一个简单的库,用于计算地理坐标之间高精度距离。例如:
use Location\Coordinate;
use Location\Distance\Vincenty;
$coordinate1 = new Coordinate(19.820664, -155.468066); // Mauna Kea Summit 茂纳凯亚峰
$coordinate2 = new Coordinate(20.709722, -156.253333); // Haleakala Summit
$calculator = new Vincenty();
$distance = $calculator->getDistance($coordinate1, $coordinate2); // returns 128130.850 (meters; ≈128 kilometers)
它将在使用地理位置数据的app里出色工作。你可以试译 HTML5 Location API,雅虎的API(或两者都用,我们在weather web app tutorial中这样做了),来获取坐标。24. ShellWrap – 优美的命令行包装器借助 ShellWrap 库,你可以在PHP代码里使用强大的 Linux/Unix 命令行工具。
require 'ShellWrap.php';
use \MrRio\ShellWrap as sh;
//列出当前文件下的所有文件
echo sh::ls();
//检出一个git分支
sh::git('checkout', 'master');
//你也可以通过管道把一个命令的输出用户另一个命令
//下面通过curl跟踪位置,然后通过grep过滤’html’管道来下载example.com网站
echo sh::grep('html', sh::curl('http://example.com', array(
'location' => true
)));
//新建一个文件
sh::touch('file.html');
//移除文件
sh::rm('file.html');
//再次移除文件(这次失败了,然后因为文件不存在而抛出异常)
try {
sh::rm('file.html');
} catch (Exception $e) {
echo 'Caught failing sh::rm() call';
}
当命令行里发生异常时,这个库抛出异常,所以你可以及时对之做出反应。它也可以通过管道让你一个命令的输出作为另一个命令的输入,来实现更强的灵活性。
来自:kelinlin
PHP语法
PHP 脚本可以放在文档中的任何位置,以 “<?php ”开始,以“ ?>” 结束,也可以在PHP脚本中使用HTML标签等;
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><h1>我的第一个 PHP 页面</h1><?php/** * Created by PhpStorm. * User: Lucifer * Date: 2019/7/8 * Time: 18:35 *///开始和结束标签中间可以书写想要展示的内容//PHP代码段可以嵌套在HTML中,也可以在PHP代码段中输出HTML语句echo "<div style='width: 250px;height:250px;border: 1px solid fuchsia;background-color: bisque'></div>";?></body></html>
运行结果:
PHP 中的代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来;
PHP 有两种注释方式:“//”用于单行注释,“/* */”为多行注释;
<?php//这里是我的单行注释 echo "这是枫哥哥的第一段PHP代码"; /* 我这里注释了多行, 在这段注释中的内容都不会显示在前台页面中 */?>
PHP的输出方式
PHP的基本输出方式有两种:echo 和 print。两种基本输出方式都可以在页面中输出内容,都是语言结构,使用的时候可以加上括号,也可以不用加括号: echo/print 或 echo()/print()。
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body><?phpecho "这是echo输出<br>";echo("这是echo()输出<br>");print "这是print输出<br>";print("这是print()输出<br>");?></body></html>
运行结果:
虽然看起来两种输出方式看起来没有区别,但是echo 输出的速度比 print 快, echo 没有返回值,可以输出一个或者多个字符串;print有返回值,值为1,只能输出一个字符串。
除了基本输出外,还可以使用 var_dump() 输出类型和值 和 var_export() 输出结构信息。
第一课 php是什么?
大家好,欢迎来到山鹰课堂,首先我自我介绍一下,本人89年,网名山鹰,山东临沂人,2010年北漂7个月,之后一直在临沂,目前在一家临沂本地电商公司做技术开发。我呢研究php到现在差不多10年的时间了,很久以前就想出一套适合新手入门的php教程,由于各种原因一直拖到现在。
在教程正式开始之前,给大家说一下学习php的各种疑虑。很多人说我没有任何基础我能学会吗?我不会英语我能学会吗?我数学不好我能学会吗 …… 这一些列的疑虑都不是问题,编程就是用来解决具体问题的,我们的教程会以具体的需求出发,步步深入。只要你会电脑基础操作,有一颗上进心就够了!学习的道路上免不了各种浮躁,希望大家可以静下心,踏踏实实地学下去。
phpshi'shen'm在php的学习道路上,我觉得一切要从需求出发,如果一上来就开始各种理论学习,相信会有很多人坚持不下去,即便是硬撑着学下去,也会边学边忘没有任何效果。这也是我自己的亲身体会,所以本套教程会从实际需求出发,一步步引导初学者进入php的世界。
我给大家解释一下什么是从需求出发?
首先我们要明白php是什么,
PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
以上描述估计新手朋友也很难理解,所以我们干脆直接了解下php能干什么!
php能干什么!
php能开发出一个企业展示网站吗? 能!
php能开发出一个购物商城吗? 能!
php能开发出一个会员管理系统吗? 能!
……
以上就是具体的需求,如果今天第一课就教会大家怎么用php开发出一个企业网站显然是不可能因为需求太大,所以我们就把大需求拆成小需求,也就有了我们的第一个需求:
php能实现1+1等于2吗?
现在需求已经有了,下面就是怎么实现了,先来给大家看一下实现这个需求的php代码:
php演示dai'm以上代码被执行后,会得出1+1=2的结果,也就实现了我们的第一个需求。
讲到这里相信大家脑袋里都会有一个疑问,代码有了,怎么运行呢?
好了,今天的教程就到这里,希望大家带着这个疑问好好的思考一下,或者是自行百度一下,这也是我们第一课的课后作业,下一课我们将解密php代码怎么运行、以及php运行环境的搭建!
希望我的教程能给大家的php学习之路带去帮助,谢谢大家,下节课我们再见!山鹰课堂,专注电脑知识、php编程、前端技术等教程分享,觉得教程有用的朋友点赞加关注,点关注,不迷路,一大波干货教程在路上!