HP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
PHP 是免费的,并且使用非常广泛。同时,对于像微软 ASP 这样的竞争者来说,PHP 无疑是另一种高效率的选项。
适用于PHP初学者的学习线路和建议
PHP 开发工具推荐
PHP 在线工具
通过实例学习 PHP
我们的 PHP 在线实例让您能够更简单的学习 PHP,实例中包含了 PHP 的源码及运行结果。
实例
<!DOCTYPE html>
<html>
<body>
<?php
echo "Hello World!";
?>
</body>
</html>
运行实例 ?
PHP 入门
PHP 参考手册
PHP 函数的完整参考手册:
Array 函数
Calendar 函数
cURL 函数
Date 函数
Directory 函数
Error 函数
Filesystem 函数
Filter 函数
FTP 函数
HTTP 函数
LibXML 函数
Mail 函数
Math 函数
Misc 函数
MySQLi 函数
SimpleXML 函数
String 函数
XML Parser 函数
Zip 函数
、下载nginx和php的程序包
1.NGINX官网下载
2.PHP官网下载
二、安装和配置nginx和php
1. 将nginx解压到指定目录下:
a. 运行nginx根目录下的nginx.exe
b. 打开浏览器访问本地IP,
c. 看看是否出现“Welcome to nginx!”,出现的证明已经启动成功了。
d. 没有启动的话,看看80端口有占用没。
nginx命令:
重新加载配置文件:nginx -s reload;
退出:nginx -s stop;
2. 将php和nginx解压到指定目录下
a. php根目录下的php.ini-recommended文件复制一份并改名为php.ini,用文本编辑器将它打开。(具体配置信息请参考文件php-示例.ini)
i. 将 ;extension_dir="ext"改成extension_dir="./ext"
注意去掉前面的”;“。
ii. 将;cgi.force_redirect=1前面的”;“去掉。
iii. 将;extension=php_curl.dll前面的”;“去掉。
iv. 将;extension=php_gd2.dll前面的”;“去掉。
v. 将;extension=php_mbstring.dll前面的”;“去掉。
vi. 将;extension=php_mysqli.dll前面的”;“去掉。
vii. 将;extension=php_openssl.dll前面的”;“去掉。
viii. 将;extension=php_pdo_mysql.dll前面的”;“去掉。
b. 在根目录下新加文件php-cgi.vbs在里面填写以下内容:
set wscriptObj=CreateObject("Wscript.Shell")
wscriptObj.run "php-cgi -b 127.0.0.1:9000",0
双击php-cgi.vbs文件启动php
3. 在\nginx\html下新建一个phpinfo.php在里面填写以下内容:
<?php phpinfo(); ?>
4. 访问url/phpinfo.php
5. 出现如下的信息就说明php已经成功安装:
三、部署项目
1.打开/nginx/conf下的nginx.conf文件来配置nginx(具体配置信息请参考文件 nginx-示例.conf)
注意:两个server端口号一样时需要另外配置域名;
host文件地址:C:\Windows\System32\drivers\etc
host文件中添加自己需要的域名
希望我的分享可以帮助到你,如果你在内容技术上遇到难题,可以+关注■@主引教程 ,反馈给我们。我们会及时回复,如果有那些内容有误可以直接提出来,我们会及时纠正,谢谢来访。
、PHP配置文件中和上传文件有关的选项
file_uploads=on 设置php脚本是否可以接受HTTP文件上传
memory_limit=8M 设置脚本可以分配的最大内存量, 防止失控的脚本独占服务器内存
upload_max_filesize=200M 限制php处理上传文件大小的最大值, 此值必须小于post_max_size的值
最大不要超过服务器的内存
upload_tmp_dir=c:/uploads/ 上传文件存放的临时路径(默认值:使用操作系统的临时目录), 该临时文件的有效期就是脚本周期:
post_max_size=250M 限制通过post方法可以接受信息的最大值
此值除了包含上传文件的大小, 还包含表单中的数据, 因此此值必须大于upload_max_filesize
限制文件上传的两个参数:
post_max_size=150M
upload_max_filesize=100M
post_max_size 必须大于 upload_max_filesize
max_execution_time PHP执行的最大时间
max_input_time php 解析post/get数据所用的最大时间
如何获取服务器能够上传的文件大小
<?php
function get_upload_max_size(){
return min(intval(get_cfg_var('upload_max_filesize')),intval(get_cfg_var('post_max_size')),intval(get_cfg_var('memory_limit')));
}
echo get_upload_max_size(); //3200M
二、上传表单需要的注意事项
1. 如果有文件上传操作表单的提交方法必须 HTTP post
2. 表单上传需要使用type为file的表
3. enctype="multipart/form-data" 只有文件上传时才使用这个值, 用来指定表单编码的数据方式, 让服务器知道, 我们要传递
一个文件并带有常规的表单信息。
4. 建议添加一个 MAX_FILE_SIZE 隐藏表单, 值的单位也是字节
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
三、PHP处理上传的数据
$_POST 接收非上传的数据
如果是文件上传的数据则使用 $_FILES处理上传的文件
<?php
//step 1 使用$_FILES['pic']["error"] 检查错误
if($_FILES["pic"]["error"] > 0){
switch($_FILES["pic"]["error"]) {
case 1:
echo "上传的文件超过了 php.ini 中 upload_max_filesize 选项限制的值<br>";
break;
case 2:
echo "上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值";
break;
case 3:
echo "文件只有部分被上传";
break;
case 4:
echo "没有文件被上传";
break;
default:
echo "末知错误";
}
exit;
}
$maxsize=5000000; //50k
//step 2 使用$_FILES["pic"]["size"] 限制大小 单位字节 2M=2000000
if($_FILES["pic"]["size"] > $maxsize ) {
echo "上传的文件太大,不能超过{$maxsize}字节";
exit;
}
//step 3 使用$_FILES["pic"]["type"]或是文件的扩展名 限制类型 MIME image/gif image/png gif png jpg
/* list($dl, $xl)=explode("/", $_FILES["pic"]["type"]);
if($dl!="image"){
echo "请上传一个图片,不充许其它类型文件";
exit;
}
*/
//$hz=strrchr($_FILES["pic"]["type"], "."); 后缀名含有"."
$allowtype=array("png", "gif", "jpg", "jpeg");
$arr=explode(".", $_FILES["pic"]["name"]);
$hz=$arr[count($arr)-1];
if(!in_array($hz, $allowtype)){
echo "这是不充许的类型";
exit;
}
//step 4 将让传后的文件名改名
$filepath="./uploads/"; //文件上传不要采用根路径 $filepath="/uploads/", 否则会报错
$randname=date("Y").date("m").date("d").date("H").date("i").date("s").rand(100, 999).".".$hz;
//将临时位置的文件移动到指定的目录上即可
if(is_uploaded_file($_FILES["pic"]["tmp_name"])){
if(move_uploaded_file($_FILES["pic"]["tmp_name"], $filepath.$randname)){
echo "上传成功";
}else{
echo "上传失败";
}
}else{
echo "不是一个上传文件";
}
多文件上传结构
多个文件上传后$_FILES 数组结构图
Array(
[myfile]=>Array(
[name]=>Array( //$_FILES["myfile"]["name"]存储所有上传文件的内容
[0]=>Rav.ini //$_FILES["myfile"]["name"][0]第一个上传文件的名称
[1]=>msgsocm.log //$_FILES["myfile"]["name"][1]第二个上传文件的名称
[2]=>NOTEPAD.EXE) //$_FILES["myfile"]["name"][2]第三个上传文件的名称
[type]=>Array( //$_FILES["myfile"]["type"]存储所有上传文件的类型
[0]=>application/octet-stream //$_FILES["myfile"]["type"][0]第一个上传文件的类型
[1]=>application/octet-stream //$_FILES["myfile"]["type"][1]第二个上传文件的类型
[2]=>application/octet-stream) //$_FILES["myfile"]["type"][2]第三个上传文件的类型
[tmp_name]=>Array(
[0]=>C:/WINDOWS/Temp/phpAF.tmp
[1]=>C:/WINDOWS/Temp/phpB0.tmp
[2]=>C:/WINDOWS/Temp/phpB1.tmp)
[error]=>Array(
[0]=>0
[1]=>0
[2]=>0)
[size]=>Array(
[0]=>64
[1]=>1350
[2]=>66560))
)
实例:
<html>
<head>
<meta charset="utf-8">
<title>index_uploads</title>
</head>
<body>
<form action="uploads.php" method="post" enctype="multipart/form-data">
<input type="file" name="file[]">
<br>
<input type="file" name="file[]">
<br>
<input type="submit" value="uploads">
</form>
</body>
</html>
<?php
header("content-type:text/html;charset=utf-8");
echo "<pre>";
print_r($_FILES);
echo "</pre>";
$count=count($_FILES['file']['name']);
for ($i=0; $i < $count; $i++) {
$tmpfile=$_FILES['file']['tmp_name'][$i];
$filefix=array_pop(explode(".", $_FILES['file']['name'][$i]));
$dstfile="uploads/files/".time()."_".mt_rand().".".$filefix;
if (move_uploaded_file($tmpfile, $dstfile)) {
echo "<script>alert('succeed!');window.location.href='index_uploads.php';</script>";
} else {
echo "<script>alert('fail!');window.location.href='index_uploads.php';</script>";
}
}
?>
相关函数
is_uploaded_file() 判断文件是否是通过 HTTP POST 上传的
bool is_uploaded_file ( string $filename )
move_uploaded_file() 将上传的文件移动到新位置
bool move_uploaded_file ( string $filename , string $destination )
$filename $_FILES["name"]["tmp_name"]
$destination 移动文件到这个位置(包含文件的路径和文件名)
注意: 上传文件的脚本的所有者一定要有"w"的权限;
大文件上传时延长上传时间:
@set_time_limit(0);
新建表单
<form action='deal.php' method='post' enctype='multipart/form-data'>
选择头像:<input type='file' name='file' />
<hr />
<input type='submit' name='submit' value='上传' />
</form>
deal.php
<?php
//1、设置响应头信息
header('Content-type:text/html; charset=utf-8');
//2、获取上传文件信息
if($_FILES['file']['size'] > 0) {
$file=$_FILES['file']['name'];
$filename=getRandName($file);
//3、把临时文件上传到uploads文件夹下(move_uploaded_file函数)
if(move_uploaded_file($_FILES['file']['tmp_name'],'uploads/'.$filename)) {
echo '上传成功';
} else {
echo '上传失败';
}
}
//定义一个函数,用于获取随机文件
function getRandName($file) {
//定义一个变量,用于接收新名称
$newname=date('YmdHis');
//定义一个字符串
$str='abcdefghijklmnopqrstuvwxyz';
//随机取出其中6个字符
for($i=0;$i<6;$i++) {
$newname .=$str[mt_rand(0,strlen($str)-1)];
}
//返回生成后的新文件名称
return $newname . strrchr($file,'.');
}
?>
多维$_FILES['uploadFile']数组进行转换
foreach($_FILES['uploadFile'] as $k=>$v){
foreach($v as $key=>$value){
if($key==$key){
$arr[$key][$k]=$value;
}
}
}
echo "<pre>";
print_r($arr);
echo "</pre>";
原数组的格式
Array
(
[name]=> Array
(
[0]=> laravel框架.txt
[1]=> ecshop分析.txt
[2]=> 注释.txt
)
[type]=> Array
(
[0]=> text/plain
[1]=> text/plain
[2]=> text/plain
)
[tmp_name]=> Array
(
[0]=> C:\Windows\php562C.tmp
[1]=> C:\Windows\php562D.tmp
[2]=> C:\Windows\php563E.tmp
)
[error]=> Array
(
[0]=> 0
[1]=> 0
[2]=> 0
)
[size]=> Array
(
[0]=> 12506
[1]=> 138
[2]=> 2094
)
)
转换后数组格式:
*请认真填写需求信息,我们会在24小时内与您取得联系。