在您可以使用PHP来管理您的上传,你首先需要建设作为用户界面的HTML表单上传的文
件。有一个在下面的例子外观和保存一个编辑HTML代码。
<html>
<body>
<form enctype="multipart/form-data" action="upload.php" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
Choose a file to upload: <input name="uploaded_file" type="file" />
<input type="submit" value="Upload" />
</form>
</body>
</html>
有一些规则需要建设时遵循HTML表单。首先,请确保该窗体使用POST方法。第二,形
式需要以下属性:字符编码=“多重/表单数据”。它指定的内容类型时使用的信息提
交给伺服器。如果没有这些要求,您的文件上传不了。
另一个需要注意的是隐藏的表单字段名为MAX_FILE_SIZE设置的值。某些Web浏览器实
际上反映了这个领域,也不会允许用户上载文件超过这个数字(字节)更大。您应该
将此值设置为配合最大上传大小,在php.ini文件中设置。这是一套与中
upload_max_filesize,默认值是2MB的。但它仍然不能保证你的脚本将不会转交了尺
寸较大的文件。危险的是,攻击者将尝试向您发送一个请求几个大文件,并填写了文
件系统,也就是PHP存储解码文件。设置在php.ini的post_max_size的指令文件的最大
尺寸,你要(必须大于中upload_max_filesize)。默认值为10MB的。此指令控制的所
有要求,在一个允许的POST数据最大大小。另外,还要确保在你的php.ini文件
file_uploads设置为On。
至少,有一个在输入标记属性看:类型=“文件”。它是用来指定为文件选择控制输入
元素。这提供了一个文件的URI的地方,则需要键入一个“浏览”按钮,可作为替代的
URI输入使用。
在用户进入一个文件的URI,并点击提交按钮的文件的副本将被发送到服务器和用户将
被重定向到upload.php。此PHP文件将处理表单数据。
返回页首
处理表单数据(PHP代码)
当文件被上传和PHP创建了一个文件的临时副本,并建立了超全局变量$ _FILES数组,
包含有关文件的信息。对于每个文件,有5个数据。我们已上传字段命名
为'uploaded_file',所以会存在以下数据:
变量$ _FILES [“uploaded_file”] [“name”]从用户的机器上载的文件的原名称
变量$ _FILES [“uploaded_file”] [“type”]的上传文件的MIME类型(如果浏览器
提供的类型)
变量$ _FILES [“uploaded_file”] [“size”]的以字节为单位上传的文件大小
变量$ _FILES [“uploaded_file”] [“tmp_name”],在该文件暂时存储在服务器上
的位置
变量$ _FILES [“uploaded_file”] [“error”]错误代码从文件上传结果
下面的例子接受一个上传的文件并保存在上载目录中。它允许根据350Kb上传只有JPEG
图像。该代码本身,是相当清楚的,但我们会作出一些解释。有一个例子在外观和保
存此为upload.php PHP代码。
<?php
//Сheck that we have a file
if((!empty($_FILES["uploaded_file"])) && ($_FILES['uploaded_file']['error']
== 0)) {
//Check if the file is JPEG image and it's size is less than 350Kb
$filename = basename($_FILES['uploaded_file']['name']);
$ext = substr($filename, strrpos($filename, '.') + 1);
if (($ext == "jpg") && ($_FILES["uploaded_file"]["type"] == "image/jpeg")
&&
($_FILES["uploaded_file"]["size"] < 350000)) {
//Determine the path to which we want to save this file
$newname = dirname(__FILE__).'/upload/'.$filename;
//Check if the file with the same name is already exists on the
server
if (!file_exists($newname)) {
//Attempt to move the uploaded file to it's new place
if ((move_uploaded_file($_FILES['uploaded_file']
['tmp_name'],$newname))) {
echo "It's done! The file has been saved as: ".$newname;
} else {
echo "Error: A problem occurred during file upload!";
}
} else {
echo "Error: File ".$_FILES["uploaded_file"]["name"]." already
exists";
}
} else {
echo "Error: Only .jpg images under 350Kb are accepted for upload";
}
} else {
echo "Error: No file uploaded";
}
?>
在此之前的上载您需要的文件,以确定文件是否真的上传任何东西。之后我们检查上
传的文件,JPEG图像,其大小小于350Kb的。接下来,我们确定的道路,这是我们要保
存此文件,并检查是否已经存在一个服务器上的这些文件的名称。当所有检查通过,
我们将文件复制到一个永久的位置使用move_upload_file()函数。此功能也证实该
文件你要过程,是一个合法的文件从用户上传结果。如果该文件上传成功,那么相应
的消息将出现。
注意:要确保PHP已经允许读取和写入临时文件中保存的位置是您要复制文件的目录。
这个例子其实很简单,它的提出是为了演示如何使用PHP上传文件。例如,您可以添加
新的条件,并允许上传GIF和PNG图像,或任何文件,您需要其他种类。如果您是本教
程使用PHP不熟悉可能是一个很好的起点。
//--------------------------------------------------
function GetIndexText($okstr,$ilen=-1)
{
if($okstr=="") return "";
$ws = explode(" ",$okstr);
$okstr = "";
$wks = "";
foreach($ws as $w)
{
$w = trim($w);
//排除小于2的字符
if(strlen($w)<2) continue;
//排除数字或日期
if(!ereg("[^0-9:-]",$w)) continue;
if(strlen($w)==2&&ord($w[0])>0x80) continue;
if(isset($wks[$w])) $wks[$w]++;
else $wks[$w] = 1;
}
if(is_array($wks))
{
arsort($wks);
if($ilen==-1)
{ foreach($wks as $w=>$v) $okstr .= $w." "; }
else
{
foreach($wks as $w=>$v){
if((strlen($okstr)+strlen($w)+1)<$ilen) $okstr .= $w." ";
else break;
}
}
}
return trim($okstr);
}
方法1 - 使用HTTP头
至于在MS Word中所述,您需要格式化的HTML / PHP页面使用Excel友好CSS和标头信息
添加到您的PHP脚本。
<?php
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;Filename=document_name.xls");
echo "<html>";
echo "<meta http-equiv="Content-Type" content="text/html;
charset=Windows-1252">";
echo "<body>";
echo "<b>testdata1</b> <u>testdata2</u> ";
echo "</body>";
echo "</html>";
?>
方法2 - 使用COM对象
请注意,在服务器运行下面必须有MS Excel中所述的代码安装。
我们使用一个文件保存到临时目录第一,作为MS Word的同样的做法。
//Create new COM object – excel.application
$xl = new COM("excel.application");
//Hide MS Excel application window
$xl->Visible = 0;
//Create new document
$xlBook = $xl->Workbooks->Add();
//Create Sheet 1
$xlBook->Worksheets(1)->Name = "Worksheet 1";
$xlBook->Worksheets(1)->Select;
//Set Width & Height
$xl->ActiveSheet->Range("A1:A1")->ColumnWidth = 10.0;
$xl->ActiveSheet->Range("B1:B1")->ColumnWidth = 13.0;
//Add text
$xl->ActiveSheet->Cells(1,1)->Value = "TEXT";
$xl->ActiveSheet->Cells(1,1)->Font->Bold = True;
//Save document
$filename = tempnam(sys_get_temp_dir(), "excel");
$xlBook->SaveAs($filename);
//Close and quit
unset( $xlBook);
$xl->ActiveWorkBook->Close();
$xl->Quit();
unset( $xl );
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment;Filename=document_name.xls");
// Send file to browser
readfile($filename);
unlink($filename);
这函数 过滤不安全字符
function s_addslashes($string, $force = 0) {
if(!get_magic_quotes_gpc()) {
if(is_array($string)) {
foreach($string as $key => $val) {
$string[$key] = s_addslashes($val, $force);
}
} else {
$string=str_replace("&#x","& # x",$string); //
过滤一些不安全字符
$string = addslashes($string);
}
}
return $string;
}
实例:
$_COOKIE = c_addslashes($_COOKIE);
$_POST = c_addslashes($_POST);
$_GET = c_addslashes($_GET);
在公共文件中加入
if($_FILES){
foreach( $_FILES as $key => $_value )
{
$_FILES[$key]['type'] =$_value['type'];
}
if(substr($_FILES[$key]['type'],0,6) !='image/')
{
exit;
}
}
禁止上传除图片文件以外的文件,
提示:
不要获取文件扩展名来判断类型,这样是最不安全的,我们用$_FIlES['form']
['type']
这个可以读取文件内容来识别文件类型,但它能识别的有限,不过如果你用图片就足
够了解。
www.111cn.net 本站原创,转载注明
<?php教程
//目录名称合法性检测
function isen($str){
$ret="";
for($i=0;$i $p=ord(substr($str,$i,1));
if(($p<48 & $p!=45 & $p!=46) || ($p>57 & $p<65) || ($p>90 & $p<97 & $p!=95) || $p>122){
nerror("不符合规范!");
}
$ret.=chr($p);
}
return $ret;
}
?>