magicmai / php Goto Github PK
View Code? Open in Web Editor NEWphp学习笔记 + 实战
php学习笔记 + 实战
全局配置列表:composer config -l -g
【注意】不能输出数组。
//语法:
void echo ( string $arg1 [, string $... ] )
//范例:
echo "Hello World";
echo "This spans
multiple lines. The newlines will be
output as well";
$foo = "foobar";
echo $foo;
//语法:
int print ( string $arg )
//范例:
print("Hello World");
$bar = array("value" => "foo");
print "this is {$bar['value']} !"; // this is foo !
//语法:
int printf ( string $format [, mixed $args [, mixed $... ]] )
//范例:
printf("%d", "17,999"); // 17
//语法:
bool print_r ( mixed $expression [, bool $return ] )
//范例:
$a = array ('a' => 'apple', 'b' => 'banana', 'c' => array ('x','y','z'));
print_r ($a);
// Array ( [a] => apple [b] => banana [c] => Array ( [0] => x [1] => y [2] => z ) )
//语法:
void var_dump ( mixed $expression [, mixed $... ] )
//范例:
$a = array(1, 2, array("a", "b", "c"));
var_dump($a);
/*
D:\php_demo\phpinfo.php:15:
array (size=3)
0 => int 1
1 => int 2
2 =>
array (size=3)
0 => string 'a' (length=1)
1 => string 'b' (length=1)
2 => string 'c' (length=1)
*/
bindParam():绑定一个参数到指定变量名。
// pdo_bindParam14.php
$stmt->bindParam(":id", $id, PDO::PARAM_INT);
// pdo_bindValue15.php
// 通过问号参数绑定
$sql = 'INSERT user(username, password, email) VALUES(?,?,?)';
$stmt = $pdo->prepare($sql);
$username = 'David';
$stmt->bindValue(1, $username);
// pdo_bindColumn17.php
$stmt->bindColumn(1, $username);
存储过程
点击 Localhost 提示:
Could not execute menu item (internal error)
[exception] Could not execute run action:系统找不到指定的文件
最近重装 Chrome 浏览器,更换了安装位置
打开 Wamp 的安装路径,我的是 D:\wamp,找到 wampmanager.conf 文件并用编辑器打开。
找到:
editor ="D:/program files/Sublime Text 3/sublime_text.exe"
navigator ="C:/......(省略)"
修改为正确的路径即可,注意使用 “/” 代替 “\”。
Notice: Undefined index: act in D:\test\post.php on line 20
Notice: Undefined variable: Submit ......
出现上面这些是 PHP 的提示而非报错,PHP 本身不需要事先声明变量即可直接使用,但是对未声明变量会有提示。一般作为正式的网站会把提示关掉的,甚至连错误信息也被关掉。
修改 php.ini
中的 error配置下错误显示方式:将 error_reporting = E_ALL
修改为
error_reporting = E_ALL & ~E_NOTICE
修改后重启下APCHE服务器,方可生效。
isset($_post['']), empty($_post['']) if -- else
在出现 notice 代码之前加上 @,@ 表示这行有错误或是警告不要输出
@$username = $_post['username'];
在变量前面加上一个 @,如
if (@$_GET['action'] == 'save') { ... }
function _get($str) {
$val = !empty($_GET[$str]) ? $_GET[$str] : null;
return $val;
}
然后在用的时候,直接用 _get('str')
代替 $_GET['str']
就行啦~
error_reporting = E_ALL & ~E_NOTICE;
(php.ini )
error_reporting()
设置 PHP 的报错级别并返回当前级别。
; 错误报告级别是位字段的叠加,推荐使用 E_ALL | E_STRICT
; 1 E_ERROR 致命的运行时错误
; 2 E_WARNING 运行时警告(非致命性错误)
; 4 E_PARSE 编译时解析错误
; 8 E_NOTICE 运行时提醒(经常是bug,也可能是有意的)
; 16 E_CORE_ERROR PHP启动时初始化过程中的致命错误
; 32 E_CORE_WARNING PHP启动时初始化过程中的警告(非致命性错)
; 64 E_COMPILE_ERROR 编译时致命性错
; 128 E_COMPILE_WARNING 编译时警告(非致命性错)
; 256 E_USER_ERROR 用户自定义的致命错误
; 512 E_USER_WARNING 用户自定义的警告(非致命性错误)
; 1024 E_USER_NOTICE 用户自定义的提醒(经常是bug,也可能是有意的)
; 2048 E_STRICT 编码标准化警告(建议如何修改以向前兼容)
; 4096 E_RECOVERABLE_ERROR 接近致命的运行时错误,若未被捕获则视同 E_ERROR
; 6143 E_ALL 除E_STRICT外的所有错误(PHP6中为8191,即包含所有)
使用方法:
error_reporting(0); //禁用错误报告
error_reporting(E_ALL ^ E_NOTICE); //显示除去 E_NOTICE 之外的所有错误信息
error_reporting(E_ALL^E_WARNING^E_NOTICE); //显示除去E_WARNING E_NOTICE 之外的所有错误信息
error_reporting(E_ERROR | E_WARNING | E_PARSE); //显示运行时错误,与error_reporting(E_ALL ^ E_NOTICE);效果相同。error_reporting(E_ALL); //显示所有错误
参考:
http://www.jb51.net/article/30328.htm 《php提示undefined index的几种解决方法》
http://www.jb51.net/article/27560.htm 《PHP函数之error_reporting(E_ALL ^ E_NOTICE)详细说明》
需要将 MySQL 的字符集改为 UTF-8,
左键点击托盘区的 WampServer 图标,
选择 MySQL
--> my.ini
,就会打开 MySQL 的配置文件;
在 [client] 段落增加:
default-character-set=utf8
在 [mysqld] 段落增加:
character_set_server=utf8
重启MySQL服务即可。
打开 wamp 的根目录,找到 wampmanager.conf
文件,打开。
找到 navigator 开头的行:
navigator = "E:\Users\..."
改为你需要使用的浏览器的地址即可,同理,修改默认编辑器,找到 editor 开头的行:
editor = "D:\program files\Sublime Text 3\sublime_text.exe"
改为你要使用的编辑器地址即可。
通过设置 Access-Control-Allow-Origin 来实现跨域。
例如:客户端的域名是 client.runoob.com,而请求的域名是 server.runoob.com。
如果直接使用ajax访问,会有以下错误:
XMLHttpRequest cannot load http://server.runoob.com/server.php. No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://client.runoob.com' is therefore not allowed access.
指定某域名 (http://client.runoob.com)
跨域访问,则只需在 http://server.runoob.com/server.php
文件头部添加如下代码:
header('Access-Control-Allow-Origin:http://client.runoob.com');
指定多个域名 (http://client1.runoob.com、http://client2.runoob.com等)
跨域访问,则只需在http://server.runoob.com/server.php
文件头部添加如下代码:
$origin = isset($_SERVER['HTTP_ORIGIN'])? $_SERVER['HTTP_ORIGIN'] : '';
$allow_origin = array(
'http://client1.runoob.com',
'http://client2.runoob.com'
);
if(in_array($origin, $allow_origin)){
header('Access-Control-Allow-Origin:'.$origin);
}
允许所有域名访问则只需在 http://server.runoob.com/server.php
文件头部添加如下代码:
header('Access-Control-Allow-Origin: *');
【报错】
#1055 - Expression # 1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'info.user.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
【解决】
①查看sql_mode:
select @@sql_mode
-- 查询出来的值为:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
②去掉 ONLY_FULL_GROUP_BY
,重新设置值
set @@sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
③上面是改变了全局 sql_mode
,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:
set sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
参考:
https://www.2cto.com/database/201707/656712.html
http://www.ywnds.com/?p=8184 《MySQL 5.7默认ONLY_FULL_GROUP_BY语义介绍》
https://zhidao.baidu.com/question/333574512.html
1. Deprecated: mysql_connect(): The mysql extension is deprecated and will be removed in the future: use mysqli or PDO instead
解决:改为 mysqli 或 PDO 即可
mysqli:
$con = mysqli_connect('localhost', 'root', '');
PDO:
$dbh = new PDO('mysql:host=localhost;dbname=test', $user, $pass);
PHP 继承自一个老的工程,名叫 PHP/FI。PHP/FI 在 1995 年由 Rasmus Lerdorf 创建,最初只是一套简单的 Perl 脚本,用来跟踪访问他主页的人们的信息。他给这一套脚本取名为 “Personal Home Page Tools”。随着更多功能需求的增加,Rasmus 写了一个更大的 C 语言的实现,它可以访问数据库,可以让用户开发简单的动态 Web 程序。Rasmus 发布了 PHP/FI 的源代码,以便每个人都可以使用它,同时大家也可以修正它的 Bug 并且改进它的源代码。
PHP/FI,一个专为个人主页/表单提供解释程序的程序,已经包含了今天 PHP 的一些基本功能。它有着 Perl 样式的变量,自动解释表单变量,并可以嵌入 HTML。语法本身与 Perl 很相似,但是它很有限,很简单,还稍微有些不协调。
到1997年,PHP/FI 2.0,也就是它的 C 语言实现的第二版在全世界已经有几千个用户(估计)和大约 50,000 个域名安装,大约是 Internet 所有域名的 1%。但是那时只有几个人在为该工程撰写少量当代码,它仍然只是一个人的工程。
PHP/FI 2.0 在经历了数个 beta 版本的发布后于 1997 年 11 月 发布了官方正式版本。不久,PHP 3.0 的第一个 alpha 版本发布,PHP 从此走向了成功。
PHP 3.0 是类似于当今 PHP 语法结构的第一个版本。Andi Gutmans 和 Zeev Suraski 在为一所大学的项目中开发电子商务程序时发现 PHP/FI 2.0 功能明显不足,于是他们重写了代码。这就是 PHP 3.0。经过Andi,Rasmus 和 Zeev 一系列的努力,考虑到 PHP/FI 已存在的用户群,他们决定联合发布 PHP 3.0 作为 PHP/FI 2.0 的官方后继版本。而 PHP/FI 2.0 的进一步开发几乎终止了。
PHP 3.0 的一个最强大的功能是它的可扩展性。除了给最终用户提供数据库、协议和 API 的基础结构,它的可扩展性还吸引了大量的开发人员加入并提交新的模块。后来证实,这是 PHP 3.0 取得巨大成功的关键。PHP 3.0 中的其它关键功能包括面向对象的支持和更强大和协调的语法结构。
这个全新的语言伴随着一个新的名称发布。它从 PHP/FI 2.0 的名称中移去了暗含“本语言只限于个人使用”的部分。它被命名为简单的缩写 “PHP”。这是一种递归的缩写,它的全称是—— PHP: Hypertext Preprocessor。
1998 年末,PHP 的安装人数几近 10,000,有大约 100,000 个网站报告他们使用了 PHP。在 PHP 3.0 的顶峰,Internet 上 10% 的 web 服务器上都安装了它。
约九个月的公开测试后,官方于 1998 年 6 月 正式发布 PHP 3.0。
1998 年的冬天,PHP 3.0 官方发布不久,Andi Gutmans 和 Zeev Suraski 开始重新编写 PHP 代码。设计目标是增强复杂程序运行时的性能和 PHP 自身代码的模块性。PHP 3.0 的新功能和广泛的第三方数据库、API的支持使得这样程序的编写成为可能,但是 PHP 3.0 没有高效处理如此复杂程序的能力。
新的被称为 “Zend Engine”(这是 Zeev 和 Andi 的缩写)的引擎,成功的实现了设计目标,并在 1999 年中期首次引入 PHP。基于该引擎并结合了更多新功能的 PHP 4.0,在 PHP 3.0 发布两年后,于 2000 年 5 月 发布了官方正式版本。除了更高的性能以外,PHP 4.0 还包含了其它一些关键功能,比如:支持更多的 web 服务器;HTTP Sessions 支持;输出缓冲;更安全的处理用户输入的方法;一些新的语言结构。
今天,已经有 10,000 名开发人员(估计)和几百万网站报告已安装了 PHP,占整个 Internet 域名的 20%。
PHP 的开发小组有很多优秀的开发人员,同时还有大量的优秀人才在进行 PHP 相关工程的开发工作,如 PEAR 和 PHP 文档的工程。
PHP 5 在长时间的开发及多个预发布版本后,于 2004 年 7 月 发布正式版本。它的核心是 Zend 引擎 2 代,引入了新的对象模型和大量新功能。
模式 | 描述 |
---|---|
r | 只读。在文件的开头开始。 |
r+ | 读/写。在文件的开头开始。 |
w | 只写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
w+ | 读/写。打开并清空文件的内容;如果文件不存在,则创建新文件。 |
a | 追加。打开并向文件末尾进行写操作,如果文件不存在,则创建新文件。 |
a+ | 读/追加。通过向文件末尾写内容,来保持文件内容。 |
x | 只写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
x+ | 读/写。创建新文件。如果文件已存在,则返回 FALSE 和一个错误。 |
参考:http://www.runoob.com/php/php-file.html 《PHP 文件处理》
左缩进:shift+tab
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.