这个文件名是upfile.php。麻烦大家看一下有什么错误或者有什么需要再完善的地方。这是面试官给我的一道程序题。谢了!<HTML>
<HEAD>
<TITLE>文件上傳界面</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT=""><script type="text/javascript" language="javascript">
function chkfm()
{
var fm=document.SubmitForm;
if(fm.Upfile.value=="") //判斷是否已選擇文件
{
alert('Please Select the file'); //提示選擇文件
fm.Upfile.focus(); //聚焦到選擇框
return false;
}
return true;
}
</script></HEAD>
<BODY><?php
/**
*
*
*/
if ($_POST)
{
$filepath=$_POST["Upfile"];//取文件路徑
fileRead($filepath);
}
/**
* 讀取文件并打印出每行前16個字符
* @param $filepath 文件路徑
* return
*/
function fileRead($filepath){
$fp=fopen($filepath,'r');
if(!$fp){
throw new Exception("文件無法打開", 1);//文件無法打開時拋出異常
}
else{
$n=0; //定義顯示的序列號
while(!feof($fp)) //如果文件結束就結束循環
{
$buffer=fgets($fp,4096);//逐行讀取文件
$buftemp=csubstr($buffer,0,16);
$n++;
echo "$n:".$buftemp."<br>";
}
}
fclose($fp);
}/**
* 截取字符串$string從$start開始$length個字符
* @param $string 字符串
* @param $start 起始位置
* @param $lengt 字符個數
* return $str
*/
function csubstr($string,$start,$length)
{
$str="";
$len=$start+$length;
for($i=$start;$i<$len;$i++)
{
if(ord(mb_substr($string,$i,1))>0xa0)//判斷該字符的字節數是否大于1
{
$str.=substr($string,$i,2);//大于則取兩個字節(一個字符)
$i++;
$len++;
}
else
$str.=substr($string,$i,1);//不大于即取一個字節
}
return $str;
}
?><FORM NAME = "SubmitForm" ACTION = "upfile.php" METHOD = "POST"
onsubmit="return chkfm()">
<INPUT TYPE = "hidden" NAME = "MAX_FILE_SIZE" VALUE ="1000000">
<INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1" >
選擇要顯示的文件:
<INPUT NAME = "Upfile" TYPE = "file" SIZE = "30" value="$_GET[filepath]"
onkeydown="if(event.keyCode!=8&&event.keyCode!=46)
{if(event.preventDefault) event.preventDefault();
else event.returnValue=false;}"/>
<INPUT NAME = "submit" VALUE = "提交" TYPE = "submit">
<INPUT NAME = "reset" VALUE = "重置" TYPE = "reset">
</FORM>
</BODY>
</HTML>
<HEAD>
<TITLE>文件上傳界面</TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT=""><script type="text/javascript" language="javascript">
function chkfm()
{
var fm=document.SubmitForm;
if(fm.Upfile.value=="") //判斷是否已選擇文件
{
alert('Please Select the file'); //提示選擇文件
fm.Upfile.focus(); //聚焦到選擇框
return false;
}
return true;
}
</script></HEAD>
<BODY><?php
/**
*
*
*/
if ($_POST)
{
$filepath=$_POST["Upfile"];//取文件路徑
fileRead($filepath);
}
/**
* 讀取文件并打印出每行前16個字符
* @param $filepath 文件路徑
* return
*/
function fileRead($filepath){
$fp=fopen($filepath,'r');
if(!$fp){
throw new Exception("文件無法打開", 1);//文件無法打開時拋出異常
}
else{
$n=0; //定義顯示的序列號
while(!feof($fp)) //如果文件結束就結束循環
{
$buffer=fgets($fp,4096);//逐行讀取文件
$buftemp=csubstr($buffer,0,16);
$n++;
echo "$n:".$buftemp."<br>";
}
}
fclose($fp);
}/**
* 截取字符串$string從$start開始$length個字符
* @param $string 字符串
* @param $start 起始位置
* @param $lengt 字符個數
* return $str
*/
function csubstr($string,$start,$length)
{
$str="";
$len=$start+$length;
for($i=$start;$i<$len;$i++)
{
if(ord(mb_substr($string,$i,1))>0xa0)//判斷該字符的字節數是否大于1
{
$str.=substr($string,$i,2);//大于則取兩個字節(一個字符)
$i++;
$len++;
}
else
$str.=substr($string,$i,1);//不大于即取一個字節
}
return $str;
}
?><FORM NAME = "SubmitForm" ACTION = "upfile.php" METHOD = "POST"
onsubmit="return chkfm()">
<INPUT TYPE = "hidden" NAME = "MAX_FILE_SIZE" VALUE ="1000000">
<INPUT TYPE = "hidden" NAME = "UploadAction" VALUE = "1" >
選擇要顯示的文件:
<INPUT NAME = "Upfile" TYPE = "file" SIZE = "30" value="$_GET[filepath]"
onkeydown="if(event.keyCode!=8&&event.keyCode!=46)
{if(event.preventDefault) event.preventDefault();
else event.returnValue=false;}"/>
<INPUT NAME = "submit" VALUE = "提交" TYPE = "submit">
<INPUT NAME = "reset" VALUE = "重置" TYPE = "reset">
</FORM>
</BODY>
</HTML>
1.文件沒有上傳功能
2.既然沒有上傳功能那就是打開本地文件,服務器根本無法打開本地文件
3.PHP對文件的操作功能完成沒有作用
修改方案:
1.html改成上傳文件
<FORM NAME = "SubmitForm" ACTION = "upfile.php" METHOD = "POST"
onsubmit="return chkfm()">
改成
<FORM NAME = "SubmitForm" ACTION = "upfile.php" METHOD = "POST" enctype='multipart/form-data'
onsubmit="return chkfm()">
2.提交後用上傳函數move_uploaded_file保存到服務器\
3.進行其它操作
这个功能是为了实现读取本地的一个txt文件,将这个文件每行的前16个字符输出到页面。
我使用file控件是防止手动输入会有路径格式不规范问题。
PHP不能直接读取客户端文件,必须先上传。