首页 > 编程技术 > php

一聚教程网-PHP入门教程01:PHP介绍与作用

发布时间:2016-11-25 14:55

为帮助新手们能学会PHP教程,一聚教程网为大家带来了PHP入门教程,将会系统的为大家进行教学,下面是第一节课的内容,了解PHP是什么以及PHP的作用。

在开始学习PHP之前,我们首先需要做的便是要知道PHP是什么、PHP有什么用、PHP的特点等。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。

PHP 是免费的,并且使用广泛。对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。

在继续学习之前,您需要对下面的知识有基本的了解:

1、HTML

2、CSS

3、JavaScript

什么是PHP?

PHP 是 "PHP Hypertext Preprocessor" 的首字母缩略,中文名为“超文本预处理器”;

PHP 是一种被广泛使用的开源脚本语言;

PHP 脚本在服务器上执行;

PHP 没有成本,可供免费下载和使用;

PHP 吸收了C语言、Java和Perl的特点,利于学习,使用广泛,主要适用于web开发领域;

PHP 是一门令人惊叹的流行语言!

它强大到足以成为在网络上最大的博客系统的核心(WordPress)!

它深邃到足以运行最大的社交网络(facebook)!

而它的易用程度足以成为初学者的首选服务器端语言!

什么是 PHP 文件?

PHP 文件能够包含文本、HTML、CSS 以及 PHP 代码

PHP 代码在服务器上执行,而结果以纯文本返回浏览器

PHP 文件的后缀是 ".php"

PHP 能够做什么?

PHP 能够生成动态页面内容

PHP 能够创建、打开、读取、写入、删除以及关闭服务器上的文件

PHP 能够接收表单数据

PHP 能够发送并取回 cookies

PHP 能够添加、删除、修改数据库中的数据

PHP 能够限制用户访问网站中的某些页面

PHP 能够对数据进行加密

通过 PHP,您可以不受限于只输出 HTML。您还能够输出图像、PDF 文件、甚至 Flash 影片。您也可以输出任何文本,比如 XHTML 和 XML。

为什么使用 PHP?

PHP 运行于各种平台(Windows, Linux, Unix, Mac OS X 等等)

PHP 兼容几乎所有服务器(Apache, IIS 等等)

PHP 支持多种数据库

PHP 是免费的。请从官方 PHP 资源下载:www.php.net

PHP 易于学习,并可高效地运行在服务器端

学习PHP的问答!

我英文不好能学习吗? 回答是YSE

我数学不好能学吗? 回答是YES

我没有基础看这个视频学习能学吗? 回答也是YES

我没耐心能学吗? 回答是NO~

PHP中的max_input_vars,PHP从5.3.9开始增加一个变量 max_input_vars 用来限制提交的表单数量了,我们这边一起来看看吧.

今天接到客服部工作人员反馈的一个客户的问题,产品是允许用户添加一个产品属性的,而每个属性是由多个表单域组成 ,这样当每添加一个属性就等于添加了n个表单域,这个客户添加的非常的多,发现在提交保存的时候总是失败,提示其中一个表单元素的索引值不存在,经测试是发现服务端接收的一些表单域丢失了一部分。起初分析的是服务器接收的数据超出了php设置的max_post_size(其实当时已经设置了8M,足够使用了),修改了测试发现此问题仍然存在。后来将用户原来的一些添加的表单元素进行删除,再重新添加同样数据库表单域可以成功,但一旦超出一定数量的表单域就会发生丢失的情况,这个时候首先怀疑的是apache是否有类似限制接收隐藏域的指令,找了没有找到,紧接着在php中批到一个max_input_vars这个指令,意思就是说php中允许接收的最大表单域数据,到目前为止基本上是确定这个原因引起的了,奖其修改为2000,重启Apache,发现一切正常。

修改php.ini中的max_input_vars参数限制提交的表单数量

比如phpmysqladmin读取数据库表,然后写入编辑,但是数据库字段有128个,然后每个字段有11个input框,大概有1400多个input,而ax_input_vars默认值为1000.

修改php.ini里面加入max_input_vars

;;;;;;;;;;;;;;;;;;;

; Resource Limits ;


;;;;;;;;;;;;;;;;;;;

max_execution_time = 30   //每个脚本的最大执行时间,以秒为单位

max_input_time = 60         //每个脚本解析请求的数据可能花费的最大时间,以秒为单位

max_input_vars = 2000

memory_limit = 32M         //每个脚本可以使用的最大内存,以M为单位,

总结:提起php中的max_input_vars 估计很少人知道这个这个指令,因为他的使用场景实在是太少了,在php.ini中这个指令的定义是指服务端最大可以接收的表单域的数量多少,默认是1000,这足够我们平时使用了。但仍然有一些特殊的情况下需要修改此值的大小。

下在我们来看一篇关于PHP7扩展开发之传参与返回值的例子,希望这一篇文章能够帮助到各位朋友,具体的细节如下文介绍.

前言

这次,我们将演示如何在PHP扩展中接受传入的参数和输出返回值。

<?php
    function default_value ($type, $value = null) {
        if ($type == "int") {
            return $value ?? 0;
        } else if ($type == "bool") {
            return $value ?? false;
        } else if ($type == "str") {
            return is_null($value) ? "" : $value;
        }
        return null;
    }

    var_dump(default_value("int"));
    var_dump(default_value("int", 1));
    var_dump(default_value("bool"));
    var_dump(default_value("bool", true));
    var_dump(default_value("str"));
    var_dump(default_value("str", "a"));
    var_dump(default_value("array"));
?>
我们将在扩展中实现`default_value`方法。

代码

基础代码

这个扩展,我们将在say扩展上增加 `default_value` 方法。say扩展相关代码大家请看这篇博文。 PHP7扩展开发之hello word 文中已经详细介绍了如何创建一个扩展和提供了源码下载。

实现default_value方法

str_concat方法的PHP扩展源码:

PHP_FUNCTION(default_value)
{
    zend_string     *type;   
    zval            *value = NULL;
ifndef FAST_ZPP

/* Get function parameters and do error-checking. */ if (zend_parse_parameters(ZEND_NUM_ARGS(), "S|z", &type, &value) == FAILURE) { return; }

else

ZEND_PARSE_PARAMETERS_START(1, 2) Z_PARAM_STR(type) Z_PARAM_OPTIONAL Z_PARAM_ZVAL_EX(value, 0, 1) ZEND_PARSE_PARAMETERS_END();

endif

if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value == NULL) { RETURN_LONG(0); } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "int", 3) == 0 && value != NULL) { RETURN_ZVAL(value, 0, 1); } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value == NULL) { RETURN_FALSE; } else if (ZSTR_LEN(type) == 4 && strncmp(ZSTR_VAL(type), "bool", 4) == 0 && value != NULL) { RETURN_ZVAL(value, 0, 1); } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value == NULL) { RETURN_EMPTY_STRING(); } else if (ZSTR_LEN(type) == 3 && strncmp(ZSTR_VAL(type), "str", 3) == 0 && value != NULL) { RETURN_ZVAL(value, 0, 1); } RETURN_NULL(); }

代码解读

获取参数

在PHP7中提供了两种获取参数的方法。`zend_parse_parameters`和FAST ZPP方式。

zend_parse_parameters

在PHP7之前一直使用`zend_parse_parameters`函数获取参数。这个函数的作用,就是把传入的参数转换为PHP内核中相应的类型,方便在PHP扩展中使用。

参数说明:

第一个参数,参数个数。一般就使用`ZEND_NUM_ARGS()`,不需要改变。

第二个参数,格式化字符串。这个格式化字符串的作用就是,指定传入参数与PHP内核类型的转换关系。

代码中 S|z 的含义就是:

S 表示参数是一个字符串。要把传入的参数转换为zend_string类型。

| 表示之后的参数是可选。可以传,也可以不传。

z 表示参数是多种类型。要把传入的参数转换为zval类型。

除此之外,还有一些specifier,需要注意:

!如果接收了一个PHP语言里的null变量,则直接把其转成C语言里的NULL,而不是封装成IS_NULL类型的zval。

/ 如果传递过来的变量与别的变量共用一个zval,而且不是引用,则进行强制分离,新的zval的is_ref__gc==0, and refcount__gc==1.

更多格式化字符串的含义可以查看官方网站。https://wiki.php.net/rfc/fast_zpp

FAST ZPP

在PHP7中新提供的方式。是为了提高参数解析的性能。对应经常使用的方法,建议使用FAST ZPP方式。

使用方式:

以`ZEND_PARSE_PARAMETERS_START(1, 2)`开头。

第一个参数表示必传的参数格式,第二个参数表示最多传入的参数个数。

以`ZEND_PARSE_PARAMETERS_END();`结束。

中间是传入参数的解析。

值得注意的是,一般FAST ZPP的宏方法与zend_parse_parameters的specifier是一一对应的。如:

Z_PARAM_OPTIONAL 对应 |

Z_PARAM_STR 对应 S

但是,Z_PARAM_ZVAL_EX方法比较特殊。它对应两个specifier,分别是 ! 和 / 。! 对应宏方法的第二个参数。/ 对应宏方法的第三个参数。如果想开启,只要设置为1即可。

FAST ZPP相应的宏方法可以查看官方网站 https://wiki.php.net/rfc/fast_zpp#proposal

返回值

方法的返回值是使用`RETURN_`开头的宏方法进行返回的。常用的宏方法有:

RETURN_NULL() 返回null

RETURN_LONG(l) 返回整型

RETURN_DOUBLE(d) 返回浮点型

RETURN_STR(s) 返回一个字符串。参数是一个zend_string * 指针

RETURN_STRING(s) 返回一个字符串。参数是一个char * 指针

RETURN_STRINGL(s, l) 返回一个字符串。第二个参数是字符串长度。

RETURN_EMPTY_STRING() 返回一个空字符串。

RETURN_ARR(r) 返回一个数组。参数是zend_array *指针。

RETURN_OBJ(r) 返回一个对象。参数是zend_object *指针。

RETURN_ZVAL(zv, copy, dtor) 返回任意类型。参数是 zval *指针。

RETURN_FALSE 返回false

RETURN_TRUE 返回true

更多宏方法请查看 Zend/zend_API.h中的相关代码。

HTTP状态码在php中可以通过curl_getinfo函数来获得,然后进行判断了具体的我们来看这段PHP获取访问页面HTTP状态码例子吧.

今天,逐风来和大家分享一个PHP获取访问页面HTTP状态的再封装函数;

以下是关键部分代码:

/**
 * 获取远程URL的HTTP状态
 *
 * @version 0.0.1
 * @Author  Chenjl  *
 * @param string  $url       远程URL
 * @param string  $data      ture[返回HTTP状态数组] | false[返回状态数值]
 *
 * @return  mixed
 */
function getHeaders($url,$data=FALSE){
    $_headers = get_headers($url,1);
    if( !$data ){return $_headers;}
    $curl = curl_init(); 
    curl_setopt($curl,CURLOPT_URL,$url);//获取内容url 
    curl_setopt($curl,CURLOPT_HEADER,1);//获取http头信息 
    curl_setopt($curl,CURLOPT_NOBODY,1);//不返回html的body信息 
    curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);//返回数据流,不直接输出 
    curl_setopt($curl,CURLOPT_TIMEOUT,30); //超时时长,单位秒 
    curl_exec($curl); 
    $rtn= curl_getinfo($curl,CURLINFO_HTTP_CODE); 
    curl_close($curl);
    return  $rtn;
}
上面的代码,逐风已将两种获取方式进行一个整合,方便不同获取HTTP状态情景的需求;

返回结果:

# 调用案例1:getHeaders('http://www.111cn.net\/\',true);
# 返回结果:200 // 直接返回HTTP状态码
 
# 调用案例2:getHeaders('http://www.111cn.net/',false);
# 返回结果:
/*
array(10) {   
[0]=>   
string(15) "HTTP/1.1 200 OK"   
["Server"]=>   
string(5) "nginx"   
["Date"]=>   
string(29) "Mon, 04 Jul 2016 06:21:35 GMT"   
["Content-Type"]=>   
string(9) "text/html"   
["Content-Length"]=>   
string(5) "26898"   
["Last-Modified"]=>   
string(29) "Mon, 04 Jul 2016 06:16:00 GMT"   
["Connection"]=>   
string(5) "close"   
["Vary"]=>   
string(15) "Accept-Encoding"   
["ETag"]=>   
string(15) ""5779ff20-6912""   
["Accept-Ranges"]=>   
string(5) "bytes"   
}   
*/

标签:[!--infotagslink--]

您可能感兴趣的文章: