php上传文件原理
㈠ 如何使用php中ftp函数上传文件以及解决上传文件失败的方法
因为系统重构实现均衡负载,网站程序与文件服务器不在一台机子上。于是,程序在上传文件的同时就要将文件上传到文件服务器上。
这里涉及到windows主机上传到linux主机,linux主机上传到linux主机。这两个之间呢,只是稍微的有点区别,因为windows的路径可以兼容linux路径,但是linux的路径不兼容windows主机'\\'的写法。所以,在写路径的时候稍加注意即可。
下面,就列举上面两种情况php中使用ftp函数上传文件的具体实现代码。
一、 ftp上传图片参数说明。
$source:本机图片完整的路径。(/a/b/c.jpg)
$des :上传目标linux主机完整的路径。
$ftp_server:ftp地址
$ftp_user_name:ftp用户名
$ftp_user_pass: ftp密码
$port:端口
二、如何使用php中ftp函数上传文件的方法
例如:
本地地址为:/a/b/c.jpg
目标地址为:/d/a/b/c.jpg
2.1、linux主机上传linux主机。
function ftpSendFile($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
// 此步骤是在于上传目录与本机的目录不一致转换使用
$des = "/d" . $des;
$conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, TRUE);
$ftp_folder = dirname($des);
$dir = explode("/", $ftp_folder);
$path = "";
for ($i = 0; $i < count($dir); $i++) {
$path .= "/" . $dir[$i];
if (!ftp_chdir($conn_id, $path)) {
$result = ftp_mkdir($conn_id, $path);
}
}
if (ftp_put($conn_id, $des, $source, FTP_BINARY)) {
return 1;
} else {
return 0;
}
ftp_close($conn_id);
}
2、windows主机上传linux主机。
function sendPic($source,$des,$ftp_server,$ftp_user_name,$ftp_user_pass,$port)
{
$des = "/d" . $des;
$conn_id = ftp_connect($ftp_server, $port) or die("Couldn't connect to $ftp_server");
$login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);
ftp_pasv($conn_id, TRUE);
$ftp_folder = dirname(str_ireplace('\\', '/', $des));
$dir = explode("/", $ftp_folder);
$path = "";
for ($i = 0; $i < count($dir); $i++) {
$path .= "/" . $dir[$i];
if (!ftp_chdir($conn_id, $path)) {
$result = ftp_mkdir($conn_id, $path);
}
}
if (ftp_put($conn_id, str_ireplace('\\', '/', $des), $source, FTP_BINARY)) {
return 1;
} else {
return 0;
}
ftp_close($conn_id);
}
上面的两种使用php中ftp函数上传文件的方法基本可以满足正常的使用。
㈡ html中input上传图片什么原理啊php后台怎么处理如果用ajax的话是传些什么
用input上传图片是把图片作为文件传输的,在php后台中使用 $_FILES来接收。
注意:前端的form表单除了action ,method 属性外,还要添加一个'enctype'属性,否则文件传输不成功。
<form enctype="multipart/form-data">
<input type="file" >
</form>
$_FILES接收信息 有几个属性:
name , 上传的文件名称
size ,上传的文件大小
tmp_name ,临时路径
type ,文件类型
error错误提示
error取值说明:
( 0:没问题。1/2:大小超过限制[1->超出php.ini限制。2->超出文件域max_file限制]。3:只上传部分附件(不好测试)。4:没有上传附件)
有上传信息时:$_FILES接收到的附件信息:
保存附件:把上传的文件由临时路径保存到真实的图片存储的位置。
move_uploaded_file(临时路径名附件,真实路径名附件)
㈢ php如何实现文件上传
所谓上传就是把文件从你电脑本地复制到你的项目指定文件夹下。
但这有个中间过程,就是复制到系统指定的临时文件夹生成临时文件。
然后将临时文件复制到你指定的文件夹下。
剩下的就是各种验证了。
给你个图片上传方法
//上传一张图片
$pic = $_FILES['pic'];
function upload($pic){
$tmp_name = $pic['tmp_name'];
$name = $pic['name'];
$type = $pic['type'];
$size = $pic['size'];
if(!is_uploaded_file($tmp_name)) exit('不是上传文件');
//判断是否是图片
$mine = array('image/png','image/jpg','image/gif','image/jpeg');
if(!in_array($type,$mine)) exit('图片格式不正确');
//判断是否有错误码
$error = $pic['error'];
switch ($error) {
case 1:
exit("超出上传文件的最大限制");
case 2:
exit("超出了指定的文件大小");
case 3:
exit("只有部分文件被上传");
case 4:
exit("文件没有被上传");
case 6:
exit("找不到临时文件夹");
case 7:
exit("文件写入失败");
}
echo "================<br/>";
echo "上传文件名称是:".$name."<br/>";
echo "上传文件类型是:".$type."<br/>";
echo "上传文件大小是:".$size."<br/>";
echo "上传后系统返回的值是:".$error."<br/>";
echo "上传文件的临时存放路径是:".$tmp_name."<br/>";
echo"开始移动临时文件".'<br>';
$des_name = 'up/'.mt_rand().time().'.'.basename($type);
$res = move_uploaded_file($tmp_name, $des_name);
if($res){
echo "================<br/>";
echo "上传图片成功".'<br>';
}
}
㈣ phpcms鍓嶅彴镐庝箞涓娄紶鏂囦欢php濡备綍瀹炵幇鏂囦欢涓娄紶锷熻兘
phpcmsv9濡备綍涓娄紶鏂囩珷
phpcmsv9娓稿㈠湪钖庡彴鍙戝竷鏂囩珷锛屾病链変笂浼犻梼浠剁殑锷熻兘銆娓稿㈠彂甯冩枃绔狅纴钖庢潵鍙戠幇娓稿㈠浘鐗囦笂浼犱笉浜嗐傛病链夐梼浠朵笂浼犲姛鑳斤纴钖庡彴璁剧疆涓哄厑璁告父瀹涓娄紶闄勪欢銆傜粨鏋滆缮鏄涓嶈屻傞櫎浜嗕慨鏀圭▼搴忥纴娌℃湁鍒镄勫姙娉曘傝ユ柟娉曞备笅:
phpcms鍐呭硅彶灏斿吂缂栬緫form.inc.php
鍙戠幇
娉ㄩ喷鎺夛纴//$allowupload=defined(IN_ADMINallowattachment
put$allowupload=1锛//杩愯岃块梾钥呬笂浼犻梼浠
杩椤厑璁告疮涓浜轰笂浼犻梼浠躲
浣嗘槸链変竴涓闂棰樸
浣犲彲浠ヤ笂浼犱箣钖庯纴閲岄溃杩樻湁锲惧簱鍜屾枃浠舵祻瑙堛傛垜涓嶆兂璁╃敤鎴风湅鍒板埆浜虹殑锲剧墖锛屾墍浠ュ湪杩欓噷淇鏀瑰备笅:
phpcms闄勪欢妯℃澘swfupload.tpl.php
锷犳敞閲
Tab_swf_3鍜4閮ㄥ垎灏卞熶简銆
铡诲仛钖с傚ソ浜嗭纴浣犲畬鎴愪简銆
cms2.0鐢佃剳涓婃庝箞璁剧疆锛
1銆佹墍链夋ā𨱒挎柟妗堥兘淇濆瓨鍦./phpcms/templates/鐩褰曚笅锛埚傛灉闇瑕佸湪绾夸慨鏀癸纴璇烽氲繃ftp灏呜ョ洰褰曡剧疆涓777锛屽苟搴旂敤鍒板瓙鐩褰曪级
2銆佺绣绔椤綋鍓崭娇鐢ㄧ殑妯℃澘鏂规堜负锛氶粯璁ゆā𨱒匡纴淇濆瓨璺寰勪负锛./phpcms/templates/default/锛屽叾浠栨ā𨱒挎柟妗堢殑鍙桦寲涓崭细褰卞搷缃戠珯鍓嶅彴镄勬樉绀恒
3銆佸傛灉闇瑕佸炲姞缃戠珯妯℃澘鏂规堬纴璇锋妸鏂扮殑妯℃澘鏂规堜笂浼犺呖./phpcms/templates/鐩褰
4銆佸傛灉闇瑕佸簲鐢ㄦ柊镄勭绣绔欐ā𨱒挎柟妗堬纴璇锋妸璇ユā𨱒挎柟妗堣剧疆涓虹郴缁熼粯璁ゆ柟妗堛
cms鏁版嵁搴撴庝箞璁剧疆锛
鍦‵TP涓鍙浠ヤ慨鏀圭殑銆
鍏蜂綋镄勬ラわ细
锏诲綍FTP镓惧埌浣犵殑锘熷悕镄勬枃浠跺す锛
镓揿紑e/锛屾帴镌镓揿紑config/锛
鍦ㄩ噷闱㈢殑config.php涓鍙浠ヤ慨鏀癸纴灏辨槸锛堜綘镄勫烟钖/e/config/config.php锛夎繖涓灏辨槸CMS镄勬暟鎹搴挞厤缃鏂囦欢锛
siteservercms镐庝箞瀹夎呭晩锛熸垜浼犵殑瀹夎呬笉浜嗗晩锛
棣栧厛鍦ㄦ湰鍦扮数鑴戜笂瑙e帇锛岃В铡嫔嚭𨱒ヤ袱涓鏂囦欢锛歩nstall_package鍜宺eadme,鐢╢tp杞浠跺皢install_package鏂囦欢澶圭殑镓链夋枃浠跺叏閮ㄤ笂浼犺呖绌洪棿锛岀劧钖庣洿鎺ュ湪娴忚埚櫒璁块梾浣犵殑锘熷悕锛屾垨鍦ㄦ祻瑙埚櫒杈揿叆浣犵殑锘熷悕/install/install.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文件上传代码
PHP上传文件非常简单,你需要一个上传的HTML文件(<FORM>),一个保存文件的PHP文件(保存),一个查询上传文件清单的工具。
真正实现完整功能的上传和管理需要使用数据库,我的网站俱乐部里面上传文件一开放很快就传了几万个文件。
最简单的方法不用数据库,可以用一个PHP文件实现,这个文件列出指定目录下的所有文件,然后提供一个上传的FORM,最后检测是否提交了FORM数据,是就保存文件到指定位置。
PHP手册第39章有关于处理这些问题的说明,我复制粘贴如下:
上一页V.特点下一页
--------------------------------------------------------------------------------
第39章文件上传处理
目录
POST方法上传
错误信息说明
常见缺陷
上传多个文件
对PUT方法的支持
POST方法上传
本特性可以使用户上传文本和二进制文件。用PHP的认证和文件操作函数,可以完全控制允许哪些人上传以及文件上传后怎样处理。
PHP能够接受任何来自符合RFC-1867标准的浏览器(包括NetscapeNavigator3及更高版本,打了补丁的MicrosoftInternetExplorer3或者更高版本)上传的文件。
相关的设置:请参阅php.ini的file_uploads,upload_max_filesize,upload_tmp_dirpost_max_size以及max_input_time设置选项。
请注意PHP也支持PUT方法的文件上传,NetscapeComposer和W3C的Amaya客户端使用这种方法。请参阅对PUT方法的支持以获取更多信息。
例39.1.文件上传表单
可以如下建立一个特殊的表单来支持文件上传:<!--Thedataencodingtype,enctype,MUSTbespecifiedasbelow-->
<formenctype="multipart/form-data"action="__URL__"method="POST">
<!--MAX_FILE_-->
<inputtype="hidden"name="MAX_FILE_SIZE"value="30000"/>
<!--$_FILESarray-->
Sendthisfile:<inputname="userfile"type="file"/>
<inputtype="submit"value="SendFile"/>
</form>
以上范例中的__URL__应该被换掉,指向一个真实的PHP文件。
MAX_FILE_SIZE隐藏字段(单位为字节)必须放在文件输入字段之前,其值为接收文件的最大尺寸。这是对浏览器的一个建议,PHP也会检查此项。在浏览器端可以简单绕过此设置,因此不要指望用此特性来阻挡大文件。实际上,PHP设置中的上传文件最大值是不会失效的。但是最好还是在表单中加上此项目,因为它可以避免用户在花时间等待上传大文件之后才发现文件过大上传失败的麻烦。
注意:要确保文件上传表单的属性是enctype="multipart/form-data",否则文件上传不了。
全局变量$_FILES自PHP4.1.0起存在(在更早的版本中用$HTTP_POST_FILES替代)。此数组包含有所有上传的文件信息。
以上范例中$_FILES数组的内容如下所示。我们假设文件上传字段的名称如上例所示,为userfile。名称可随意命名。
$_FILES['userfile']['name']
客户端机器文件的原名称。
$_FILES['userfile']['type']
文件的MIME类型,如果浏览器提供此信息的话。一个例子是“image/gif”。不过此MIME类型在PHP端并不检查,因此不要想当然认为有这个值。
$_FILES['userfile']['size']
已上传文件的大小,单位为字节。
$_FILES['userfile']['tmp_name']
文件被上传后在服务端储存的临时文件名。
$_FILES['userfile']['error']
和该文件上传相关的错误代码。此项目是在PHP4.2.0版本中增加的。
文件被上传后,默认地会被储存到服务端的默认临时目录中,除非php.ini中的upload_tmp_dir设置为其它的路径。服务端的默认临时目录可以通过更改PHP运行环境的环境变量TMPDIR来重新设置,但是在PHP脚本内部通过运行putenv()函数来设置是不起作用的。该环境变量也可以用来确认其它的操作也是在上传的文件上进行的。
例39.2.使文件上传生效
请查阅函数is_uploaded_file()和move_uploaded_file()以获取进一步的信息。以下范例处理由表单提供的文件上传。
<?php
//InPHPversionsearlierthan4.1.0,$HTTP_POST_FILESshouldbeusedinstead
//of$_FILES.
$uploaddir='/var/www/uploads/';
$uploadfile=$uploaddir.basename($_FILES['userfile']['name']);
echo'<pre>';
if(move_uploaded_file($_FILES['userfile']['tmp_name'],$uploadfile)){
echo"Fileisvalid,andwassuccessfullyuploaded.\n";
}else{
echo"Possiblefileuploadattack!\n";
}
echo'Hereissomemoredebugginginfo:';
print_r($_FILES);
print"</pre>";
?>
接受上传文件的PHP脚本为了决定接下来要对该文件进行哪些操作,应该实现任何逻辑上必要的检查。例如可以用$_FILES['userfile']['size']变量来排除过大或过小的文件,也可以通过$_FILES['userfile']['type']变量来排除文件类型和某种标准不相符合的文件,但只把这个当作一系列检查中的第一步,因为此值完全由客户端控制而在PHP端并不检查。自PHP4.2.0起,还可以通过$_FILES['userfile']['error']变量来根据不同的错误代码来计划下一步如何处理。不管怎样,要么将该文件从临时目录中删除,要么将其移动到其它的地方。
如果表单中没有选择上传的文件,则PHP变量$_FILES['userfile']['size']的值将为0,$_FILES['userfile']['tmp_name']将为空。
如果该文件没有被移动到其它地方也没有被改名,则该文件将在表单请求结束时被删除。
例39.3.上传一组文件
PHP的HTML数组特性甚至支持文件类型。
<formaction=""method="post"enctype="multipart/form-data">
<p>Pictures:
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="file"name="pictures[]"/>
<inputtype="submit"value="Send"/>
</p>
</form>
<?php
foreach($_FILES["pictures"]["error"]as$key=>$error){
if($error==UPLOAD_ERR_OK){
$tmp_name=$_FILES["pictures"]["tmp_name"][$key];
$name=$_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name,"data/$name");
}
}
?>
--------------------------------------------------------------------------------
上一页上一级下一页
38.处理XForms起始页错误信息说明
㈦ <INPUT TYPE="file" 中的参数是如何传递的
ENCTYPE="multipart/form-data"
<form>标签里要加这样一个参数,不加这参数,上传到服务器的只是文件路径,豪无用处。上传的数据会以一定备尘的表单格式上传到服务器,这个格式是固定的
你在servlet中request.getInputStream打开仿毁禅输入流,然后把里面的数据全部保存到一个文件里去,看看余如这文件你就知道该怎么写了。