大家好,今天小编来为大家解答php本地服务器这个问题,怎样在本地测试php代码很多人还不知道,现在让我们一起来看看吧!
一、经典怎样通过php将本地的文件上传到服务器上
创建一个文件上传表单
允许用户从表单上传文件是非常有用的。
请看下面这个供上传文件的 HTML表单:
<html>
<body>
<form action="upload_file.php" method="post"
enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file"/>
<br/>
<input type="submit" name="submit" value="Submit"/>
</form>
</body>
</html>
请留意如下有关此表单的信息:
<form>标签的 enctype属*规定了在提交表单时要使用哪种内容类型。在表单需要二进制数据时,比如文件内容,请使用"multipart/form-data"。
<input>标签的 type="file"属*规定了应该把输入作为文件来处理。举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。
注释:允许用户上传文件是一个巨大的安全风险。请仅仅允许可信的用户执行文件上传操作。
创建上传脚本
"upload_file.php"文件含有供上传文件的代码:
<?php
if($_FILES["file"]["error"]> 0)
{
echo"Error:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/ 1024)." Kb<br/>";
echo"Stored in:".$_FILES["file"]["tmp_name"];
}
?>
通过使用 PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的 input name,第二个下标可以是"name","type","size","tmp_name"或"error"。就像这样:
$_FILES["file"]["name"]-被上传文件的名称
$_FILES["file"]["type"]-被上传文件的类型
$_FILES["file"]["size"]-被上传文件的大小,以字节计
$_FILES["file"]["tmp_name"]-存储在服务器的文件的临时副本的名称
$_FILES["file"]["error"]-由文件上传导致的错误代码
这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。
上传限制
在这个脚本中,我们增加了对文件上传的限制。用户只能上传.gif或.jpeg文件,文件大小必须小于 20 kb:
<?php
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jpeg")
||($_FILES["file"]["type"]=="image/pjpeg"))
&&($_FILES["file"]["size"]< 20000))
{
if($_FILES["file"]["error"]> 0)
{
echo"Error:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/ 1024)." Kb<br/>";
echo"Stored in:".$_FILES["file"]["tmp_name"];
}
}
else
{
echo"Invalid file";
}
?>
注释:对于 IE,识别 jpg文件的类型必须是 pjpeg,对于 FireFox,必须是 jpeg。
保存被上传的文件
上面的例子在服务器的 PHP临时文件夹创建了一个被上传文件的临时副本。
这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:
<?php
if((($_FILES["file"]["type"]=="image/gif")
||($_FILES["file"]["type"]=="image/jpeg")
||($_FILES["file"]["type"]=="image/pjpeg"))
&&($_FILES["file"]["size"]< 20000))
{
if($_FILES["file"]["error"]> 0)
{
echo"Return Code:".$_FILES["file"]["error"]."<br/>";
}
else
{
echo"Upload:".$_FILES["file"]["name"]."<br/>";
echo"Type:".$_FILES["file"]["type"]."<br/>";
echo"Size:".($_FILES["file"]["size"]/ 1024)." Kb<br/>";
echo"Temp file:".$_FILES["file"]["tmp_name"]."<br/>";
if(file_exists("upload/".$_FILES["file"]["name"]))
{
echo$_FILES["file"]["name"]." already exists.";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/".$_FILES["file"]["name"]);
echo"Stored in:"."upload/".$_FILES["file"]["name"];
}
}
}
else
{
echo"Invalid file";
}
?>
上面的脚本检测了是否已存在此文件,如果不存在,则把文件拷贝到指定的文件夹。
二、怎样在本地测试php代码
准备工作首先要如下软件,推荐到官网,如果你是像我一样只是测试,那么到sky.吧,这样比较快。
Apache
最流行的HTTP服务器软件之一。快速、可靠、可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,完全免费,完全源代码开放。
我的是for Windows版本,目前最新版本是:2.0.54
PHP
PHP是一种 HTML内嵌式的语言。而PHP独特的语法混合了 C、J*a、Perl以及 PHP式的新语法。它可以比 CGI或者 Perl更快速的执行动态网页。
我的是for Windows版本,目前最新版本是:5.0.4
MySQL
是一个多线程的,结构化查询语言(SQL)数据库服务器。SQL在世界上是最流行的数据库语言。MySQL的执行*能非常高,运行速度非常快,并非常容易使用。
我的是for Windows版本,目前最新版本是:5.0.4 Beta
phpMyAdmin
phpMyAdmin是一个用PHP编写的,可以通过互联网控制和操作MySQL。通过phpMyAdmin可以完全对数据库进行操作。
我的是for Windows版本,目前最新版本是:2.6.2-pl1
安装apache和PHP
下面是我的安装记录:
选择80端口,将apache安装在 e:\apache下。
配置apache里的d.conf文件(conf目录下)
找到 DocumentRoot E:/apache/Apache2/htdocs将其改为WEB目录E:/htdocs
找到 DirectoryIndex index.html index.html.var在后面加入 index.htm index.php default.php default.html
选择模块化模式安装
找到#LoadModule ssl_module modules/mod_ssl.so这行,在此行后加入一行
LoadModule php5_module e:/php/php5apache2.dll
找到 AddType lication/x-gzip.gz.tgz这行,在此行后加入一行
AddType lication/x-d-php.php
将php-5.0.4-Win32.zip里内容解压到e:\php里,找到php.ini-remended,重命名为php.ini并拷贝到windows目录下。
NTFS上记得给服务器开PHP.ini的读权限。
查找extension_dir后面的改为e:/php/ext
查找Windows Extensions,把下面有一排的;extension=php_***.dll的分号去掉,就是支持组件了。我把 extension=php_gd2.dll extension=php_mbstring.dll extension=php_mysql.dll的分号去掉了。
php5默认不支持mysql了,所以要为他添加支持,除了extension=php_mysql.dll去分号之外,在php目录里有个libmysql.dll文件,把它复制到系统的system32文件夹下,复制php.ini到windows目录下。
此时PHP环境基本已经配置成功
在WEB根目录里建一个名为test.php的文件内容如下
<? echo phpinfo();?>
重新启动apache服务,用浏览器打开
如果可以看到php配置输出信息就成功了
安装mysql
将mysql安装到指定目录,然后安装程序会引导你一步步配置。不过奇怪的是最后任务栏没有出现Mysql的图标。
修改mysql数据库的root密码
用cmd进入命今行模式输入如下命令:(注: d:\mysql为mysql安装目录)
cd d:\mysql\bin
mysqladmin-u root-p password 123456
回车出现
Enter password:(注:这是叫你输入原密码.刚安装时密码为空,所以回车即可)
此时mysql中账号 root的密码被改为 123456安装完毕
配置php.ini并测试mysql
找到extension_dir=./改为 extension_dir= e:/php/ext
找到
;extension=php_mysql.dll
将';'去掉改为
extension=php_mysql.dll
找到
;session.s*e_path=/tmp
将';'去掉设置你保存session的目录,如
session.s*e_path= e:/php/session_temp
重启apache服务
在Web根目录下建立testdb.php文件内容如下:
<?php
$link=mysql_connect('localhost','root','123456');
if(!$link) echo fail;
else echo suess;
mysql_close();
?>
用浏览器打开如果输出suess就OK了
phpmyadmin的安装配置
将phpMyAdmin-V2.6.2-pl1.zip解压到WEB根目录中去,重命名文件夹为phpmyadmin或其它
打开phpmyadmin目录中的 config.inc.php
找到
$cfg['Servers'][$i]['user']='root';
$cfg['Servers'][$i]['password']='123456';
分别填上用户名和密码
三、php项目如何部署在服务器上
一、阿里ECS服务器配置
1.因为线上已经有几个站点了.所以要配置ngnix多站点
2.阿里云ecs目录结构,ngxin在/etc/nginx/目录下,配置的地方主要是nginx.config文件。或者在conf.d新建一个配置文件然后在include到nginx.config文件中
3.nginx.config新建站点信息
server{
listen 80;
server_name 你的域名.;
root站点的相对路径;
index index.php index.html index.htm;
#charset koi8-r;
#aess_log/var/log/nginx/host.aess.log main;
# Load configuration files for the default server block.
include/etc/nginx/default.d/*.conf;
location/{
#try_files$uri$uri//index.php;
root/opt//pcweb/ytyy_pc;
index index.php index.html index.htm; if(!-e$request_filename){ rewrite ^(.*)$/index.php?s=$1 last; break;}} url重写(可以没有)
# redirect server error pages to the static page/40x.html
#
error_page 404/404.html; 40错误页面配置
location=/40x.html{
}
# redirect server error pages to the static page/50x.html
#
error_page 500 502 503 504/50x.html; 50错误页面配置
location=/50x.html{
}
location~ \.php${
root站点相对路径;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME$document_root$fastcgi_script_name;
include fastcgi_params;
}
location~/\.ht{
deny all;
}
}
配置文件的基本内容如上;
配置完成后测试配置文件是否正确
这样配置就可以使用了
然后重启nginx服务器
这样nginx配置就结束了可以使用了。吧站点文件放到对应的目录下面。我git clone过去的。
二.thinkphp项目文件转移
本来以为上传完就结束了。上传上去碰到的第一个问题就是访问页面报错,页面被电信的114页面劫持了。。。麻蛋看不到报错
万能百度大法
解决方法1.inter高级选项->隐私->站点新加阻止站点
解决方法2:控制面板->网络和inter->本地连接->属*->ipv4使用如下ip
终于搞定可以看到报错页面了。。。。。。麻蛋。再次开启万能百度大法
得到最终结论是文件目录权限引起的。thinkphp的runtime目录没有写入权限。。thinkphp文件上传到阿里的好像都有这个问题。解决问题很简单
进入到项目文件目录
跟文件最高权限
chmod-R 777 [目录]//linux修改文件权限