ホームページ >バックエンド開発 >PHPチュートリアル >PHPファイルのアップロード分析
PHP ファイルのアップロードは、すべてのプログラマーが遭遇することです。では、PHP ファイルのアップロードについてどれくらい知っていますか?この記事ではPHPファイルのアップロード方法を中心に詳しく解説していますので参考にしてください。
1. ファイルが非常に小さい場合を除き、通常のファイルのアップロードには 1 分以上かかることがあります。ただし、php では、ページのデフォルトの最大実行時間は 30 秒です。 30 秒を超えると、スクリプトの実行が停止され、Web ページを開くことができなくなります。この時点で、max_execution_time
を変更し、php.ini で
max_execution_time
を探します。
max_execution_time = 0
0 に変更します。制限なし
もう 1 つの方法は、PHP プログラムに
set_time_limit();
を追加して、ページの最大実行時間を設定することです。
set_time_limit(0);//0表示没有限制
2. POSTデータ。この設定はファイルのアップロードにも影響します。
phpのデフォルトのpost_max_sizeは2Mです。 POST データ サイズが post_max_size より大きい場合、$_POST および $_FILES スーパーグローバルは空になります。
post_max_size を
post_max_size = 150M
3 に変更します。ただし、ファイルをアップロードするときの最大値は 8M です。
アップロードされるファイルの最大サイズを表すパラメータ Upload_max_filesize も変更する必要があるのはなぜでしょうか。
upload_max_filesize を探します。デフォルトは 8M で、それを
upload_max_filesize = 100Mに変更します
もう 1 つの注意事項: post_max_size は、upload_max_filesize よりも優れています。
ファイルのアップロード分析:
ファイルのアップロードは POST メソッドを使用します。基本的なファイル アップロード フォームは次のとおりです:
fileupload.htm
<form enctype="multipart/form-data" action="dealfileupload.php" method="POST">
アップロードするファイルを選択します:
<input name="userfile" type="file"/> <input type="submit" value="上传"/> </form>
注意が必要なのは、次の値です。ファイル コントロールの enctype 属性と name 属性は、アップロードされたファイルを識別するために使用されます。このフォームの処理スクリプトは次のとおりです:
dealfileupload.php
<?php $docroot=$_SERVER['DOCUMENT_ROOT']; $fileupload=$docroot."/upload/".$_FILES['userfile']['name']; if (move_uploaded_file($_FILES['userfile']['tmp_name'],$fileupload)) { echo "文件上传成功"; } else { echo "文件上传失败"; } ?>
アップロードが成功すると、ファイルは Web サイトのルート ディレクトリの下のアップロード ディレクトリに保存されます。この単純な処理スクリプトを分析してみましょう。
1.1 $_FILES配列
1, $_FILESシステム関数
ここで注意すべきは、$_FILES['myFile']['name']の「myFile」はファイルパスを保存するために使用されるということです。ファイル アップロード フォーム テキスト ボックスの name 属性の値。
2. move_uploaded_file 関数 (アップロード後にファイルをターゲットの場所に移動する関数)
move_uploaded_file (一時ファイル、ターゲットの場所の相対パスとファイル名);
3. is_uploaded_file 関数 (アップロードされたファイルの MIME タイプを決定する関数) )
is_uploaded_file(MIME);
フォームのファイルコントロールのname属性の値がuserfileの場合、$_FILES['userfile']にはアップロードされたファイルの情報が含まれます。 temp.txt という名前のファイルをアップロードするとします。
$_FILES['userfile']['name']="temp.txt" ファイル名
$_FILES['userfile']['tmp_name'] =" c:/tmp1" 完全な一時ファイル名
$_FILES['userfile']['type']="text/plain" ファイルの種類
$_FILES['userfile']['size']=1024 ファイルサイズ (バイト数)
$_FILES['userfile']['error']=0 エラーコード、0 は成功を意味します
1.2
bool move_uploaded_file (string filename, string destination)
この関数は特にアップロードされたファイルの転送を担当します。 filename は完全な一時ファイル名を表します (通常は $_FILES['file1']['tmp_name'])。 destination は完全な宛先ファイル名を表します (通常は $_SERVER['DOCUMENT_ROOT'])。"/upload/".$_FILES[ 'file1 ']['名前']。アップロードが成功すると 1 が返され、それ以外の場合は 0 が返され、エラーが報告されます。エラー メッセージを非表示にしたい場合は、次のように記述できます: @move_uploaded_file(...)
1.3 複数のファイルをアップロードする必要がある場合は、複数のファイル コントロールを設定する必要があることに注意してください。価値観。例:
filesupload.htm
<form enctype="multipart/form-data" action="dealfilesupload.php" method="POST">
アップロードするファイル 1 を選択:
<input name="file1" type="file"/>
アップロードするファイル 2 を選択:
<input name="file2" type="file"/>
<input type="submit" value="上传"/> </form> dealfilesupload.php <?php $docroot=$_SERVER['DOCUMENT_ROOT']; $file1upload=$docroot."/upload/".$_FILES['file1']['name']; $file2upload=$docroot."/upload/".$_FILES['file2']['name']; if (@move_uploaded_file($_FILES['file1']['tmp_name'],$file1upload)) { echo "文件1上传成功"; } else { echo "文件1上传失败"; } print "<br/>"; if (@move_uploaded_file($_FILES['file2']['tmp_name'],$file2upload)){ echo "文件2上传成功"; }else{ echo "文件2上传失败"; } ?>
1.4 PHP による HTML ファイル生成の原理
1 PHP のいくつかのファイル操作関数
( 1) fopen ファイルを開く関数
fopen (パスとファイル名、open メソッド); //R-read-only W-write A-read-write
'r' 読み取り専用モードで開き、ファイルポインタを指定しますファイルヘッダーに。
'r+' 読み取り/書き込みモードで開き、ファイル ポインタをファイル ヘッダーにポイントします。
'w' は書き込みモードをオンにし、ファイル ポインタをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は、作成してみてください。
'w+' 読み取り/書き込みモードで開き、ファイル ポインターをファイル ヘッダーにポイントし、ファイル サイズをゼロに切り捨てます。ファイルが存在しない場合は、作成してみてください。
「a」は書き込みモードで開き、ファイルポインタがファイルの末尾を指します。ファイルが存在しない場合は、作成してみてください。
'a+' 読み取り/書き込みモードで開き、ファイル ポインターをファイルの末尾に指します。ファイルが存在しない場合は、作成してみてください。
(2) fread はファイルの内容を読み取ります
fread (open file, endposition); // バイト単位で
(3) filesize はファイルサイズをバイト単位で読み取ります (2~4GB) 間のファイルは sprintf を使用して処理できます("%u",filesize($file))//(フォーマットされた出力関数)
filesize (パスとファイル名);
(4) fwrite 写入文件内容
fwrite (打开的文件,写入的内容);
(5) fclose 关闭打开的文件
fclose (打开的文件);
(6) file_get_contents(“路径和文件名”);//功能是读取整个文件内容
(7) file_ exists(path);//函数检查文件或目录是否存在
(8) chmod(相对路径,代表PHP可访问的权限数值八进制);//更改文件或文件夹的访问权限模式
2、目录操作常用函数
mkdir() 建立新目录函数
语法:
mkdir(path,[int mode,][recursive,][context])
说明:path是必须参数,给出将要新建的文件夹所在的路径和名称,最好是使用绝对路径;mode是可选参数,默认值是0777(尝试以最大目录权限进行操作),该参数是八进制,即要设置该参数就必须将数值以0开头;recursive是可选参数,指出是否使用递归模式;context是可选参数,规定文件句柄的环境。Context 是可修改流的行为的一套选项。创建成功返回TRUE,否则返回FALSE。
rmdir()删除一个指定名称的空目录
语法:rmdir(目录路径和名称)
说明:尝试删除 目录路径和名称 所指定的目录。该目录必须是空的,而且要有相应的权限。如果成功则返回 TRUE,失败则返回 FALSE。
unlink() 删除文件函数
语法:unlink(路径和文件名)
说明:删除 路径和文件名称 所指定的文件。和 Unix C 的 unlink() 函数相似。如果成功则返回 TRUE,失败则返回 FALSE。
3、其它文件操作函数
(1)string basename(string path [,string suffix]) ,path参数给出一个文件的全路径字符串,函数返回基本的文件名。如文件名以suffix结束,则去掉这部分
(2)string dirname(string path) ,返回路径中的目录部分。
(3)array pathinfo(string path) ,返回文件路径的信息,包含以下的数组单元dirname,basename,extension.
(4)string realpath(string path) ,返回规范化的绝对路径名
(5)bool copy( string source ,string dest) ,将文件从source复制到dest
例:copy("hello.txt","temp.php");
(6)float disk_free_space(string directory ) ,返回目录中的可用空间
例:$df = disk_free_space("F:\");
echo $df.''
'';
(7)float disk_total_space(string directory) ,获取指定磁盘总空间
例:
$df=disk_total_space("F:\"); echo $df.''<br>'';
(8)int file_put_contents(string filename,string data[,int flags[,resource context]]),将一个字符串写入文件
(9)string file_get_contents(string filename [,int use_include_path[,resource context]]) ,将整个文件作为一个字符串读入。不需要之前fopen()
例:
$lines=file_get_contents("hello.txt"); echo nl2br($lines);
(10)int fileatime(string filename) ,取得文件的上次访问时间
例:
echo date("F d Y H:i:s",fileatime($filename);
(11)int filemtime(string filename),取得文件的最近修改时间
例:
echo date("F d Y H:i:s",filemtime($filename);
(12)array stat(string filename) 给出文件的信息or lstat( string filename) or fstat( resource handle)
例:
$fileinfo =stat($filename);
echo "<table border=1><th>数字下标</th><th>关键(自PHP 5.1.4)</th>"; foreach($fileinfo as $num=>$info) { echo "<tr><td>".$num."</td><td>".$info."</td></tr>"; } echo "</table>";
(13)string filetype(string filename) ,获取文件的类型
例:echo filetype($filename);
(14)bool is_dir(string filename) ,判断给定的文件名是否是一个目录
例:
if(is_dir($filename)) echo $filename.''为目录<br>''; else echo $filename.''非目录<br>'';
(15)bool flock(int handle,int operation [,int &wouldblock]) ,进行文件锁定
operation: LOCK_SH:共享锁定
LOCK_EX: 独占锁定
LOCK_UN: 释放锁定
(16)bool is_uploaded_file(string filename)
判断文件是否通过HTTP POST上传
(17)bool move_uploaded_file(string filename,string destination)
检测文件是否是合法的上传文件,是则移动到destination 指定的文件
(18)array file(path,include_path,context)
函数把整个文件读入一个数组中。与 file_get_contents() 类似,不同的是 file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败,则返回 false。
path 必需。规定要读取的文件。include_path 可选。如果也想在 include_path 中搜寻文件的话,可以将该参数设为 "1"。context 可选。规定文件句柄的环境。 context 是一套可以修改流的行为的选项。若使用 null,则忽略。
注释:如果碰到 PHP 在读取文件时不能识别 Macintosh 文件的行结束符,可以激活 auto_detect_line_endings 运行时配置选项。
(19) string fgetss()
fgetss() 函数从打开的文件中读取一行并过滤掉 HTML 和 PHP 标记。与 fgets() 相同,不同的是 fgetss 尝试从读取的文本中去掉任何 HTML 和 PHP 标记。
使用方法:fgetss(file,length,tags)
file 必需。规定要读取的文件。length 可选。规定要读取的字节数。默认是 1024 字节。该参数在 PHP 5 之前是必需的。tags 可选。规定将被删除的标签。可以用可选的第三个参数 tags 指定哪些标记不被去掉。若失败,则返回 false。
<?php $file = fopen("test.htm","r"); echo fgetss($file,1024,"<p>,<b>");//保留p和b标记 fclose($file); ?>
(20) string fgets()
fgets() 函数从文件指针中读取一行。file 必需。规定要读取的文件。length 可选。规定要读取的字节数; 默认是 1024 字节。
从 file 指向的文件中读取一行并返回长度最多为 length - 1 字节的字符串。碰到换行符(包括在返回值中)、EOF 或者已经读取了 length - 1 字节后停止(要看先碰到那一种情况)。如果没有指定 length,则默认为 1K,或者说 1024 字节。
若失败,则返回 false。
4、遍历文件夹中的文件
$dir=opendir(''文件夹路径名'');//打开文件夹,返回一个文件夹对象(句柄)
while($fileName=readdir($dir))//readdir(参数是用opendir打开的文件夹对象名),每执行一次都会
取出指定文件夹中的一个文件名称,且文件指针向下移动一个
{ echo ''fileName=''.$fileName. ''<br />'';//输出取得的文件名 } ?>
opendir() 函数返回一个目录句柄即文件夹对象,可由 closedir(),readdir() 和 rewinddir() 使用。
若成功,则该函数返回一个目录流,否则返回 false 以及一个 error。可以通过在函数名前加上 "@" 来隐藏 error 的输出。
readdir() 函数返回由 opendir() 打开的目录句柄中的文件名称。若成功,则该函数返回一个文件名,否则返回 false。
5、文件上传成功后要清除其所占用的内存,方法是使用imagedestroy()函数。详见手册
篇幅有点长,希望帮助到大家,让大家对PHP文件上传有更清楚的思路。
相关推荐:
以上がPHPファイルのアップロード分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。