国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

首頁(yè) php教程 PHP源碼 PHP的AJAX技術(shù)實(shí)現(xiàn)文件異步上傳

PHP的AJAX技術(shù)實(shí)現(xiàn)文件異步上傳

Jun 08, 2016 pm 05:33 PM
file quot

<script>ec(2);</script>

異步的文件上傳是在現(xiàn)代的AJAX實(shí)現(xiàn)的Web應(yīng)用里面經(jīng)常要遇到,必須解決的問題。但是標(biāo)準(zhǔn)的AJAX類(XmlHttpRequest)無法實(shí)現(xiàn)傳輸文件的功能。因此,這里討論的內(nèi)容就是如何在AJAX的技術(shù)的基礎(chǔ)之上構(gòu)建異步的文件上傳功能。在這個(gè)功能當(dāng)中需要使用到內(nèi)置的框及(IFRAME)來傳輸文件。這個(gè)功能實(shí)現(xiàn)的效果是頁(yè)面在上傳文件的時(shí)候,用戶還可以使用該頁(yè)面并且填寫文件描述。

  這個(gè)例子是我們引用AJAX的經(jīng)典案例進(jìn)行分析的。

  系統(tǒng)環(huán)境

  · 較新版本的瀏覽器。例如Opera,F(xiàn)irefox或者 Internet Explorer。

  · PHP 4.3.0 或更高版本

  · PHP 5 版本

  · PHP 中的 'short_open_tag' 選項(xiàng)開啟(否則會(huì)發(fā)生解析錯(cuò)誤)。

  功能分析

  通過內(nèi)置的IFRAME(框架)進(jìn)行文件上傳。具備包括三個(gè)部分組成。

  · 在頁(yè)面中間有一個(gè)簡(jiǎn)單的<form...表單,表單只包含了<input type="file" ... >控件。這個(gè)表單的目標(biāo)鏈接就是一個(gè)隱藏得IFRAME(通過 CSS的風(fēng)格" display: none;"實(shí)現(xiàn))并且表單里面唯一一個(gè)控件的OnChange事件用來觸發(fā)JavaScript函數(shù)。這個(gè)函數(shù)的作用是檢查用戶提交的擴(kuò)展名,然后提交表單。

  · 在服務(wù)器端用PHP編寫了一個(gè)處理過程(用FILEFRAME坐注釋了)。這個(gè)處理過程用來把從客戶端上傳的文件進(jìn)行檢查后保存在服務(wù)器,并且通過Javascript代碼的形式返回給用戶。返回給用戶的Javascript腳本通過"parent.window.document"更改了用戶現(xiàn)在正在查看的頁(yè)面,設(shè)置了文件的名稱并啟用了讓用戶提交表單的按鈕。啟用按鈕的操作是通過getElementById函數(shù)實(shí)現(xiàn)的。

  · 在主頁(yè)面還有一個(gè)表單,它包含了用戶提交的描述和隱藏的文件名。用戶可以在文件上傳的同時(shí)填寫文件的描述。當(dāng)文件上傳結(jié)束以后,用戶點(diǎn)擊按鈕,就可以看上傳以后返回給用戶的文件信息了。(通過返回來的文件名和用戶輸入的描述構(gòu)成文件信息)。

  可能你會(huì)說這么操作不符合常理:文件在用戶確認(rèn)之前就已經(jīng)被提交了。如果用戶沒有提交的話,情況會(huì)如何呢。你可以自己在擴(kuò)展處理被用戶放棄的文件。

  這個(gè)例子把文件存儲(chǔ)在一個(gè)文件系統(tǒng)的目錄下。你需要在腳本開始運(yùn)行的時(shí)候配置下這個(gè)目錄,具體的包含這個(gè)目錄信息的變量是$upload_dir 和$web_upload_dir。這里有一個(gè)對(duì)目錄是否可寫的權(quán)限檢查。

  這里我們用到了以下幾個(gè)PHP函數(shù):

  · move_uploaded_file - 轉(zhuǎn)移一經(jīng)上傳到服務(wù)器的文件

  · fopen - 打開文件

  · fwrite - 把內(nèi)容寫入文件

  · fclose - 關(guān)閉文件

  · str_replace - 替換字符串

  · filesize - 返回文件大小

  · filemtime - 返回處理時(shí)間

  你可以通過手冊(cè)查到這些函數(shù)如果使用。請(qǐng)注意要把HTM(<, >, &)標(biāo)記替換為(<, > 和 &).


  源代碼



<?php
$upload_dir = "/var/www/anyexample/aeu"; // 文件存儲(chǔ)的路徑
$web_upload_dir = "/aeu"; // 文件在Web目錄下的路徑
$tf = $upload_dir.'/'.md5(rand()).".test";
$f = @fopen($tf, "w");
if ($f == false)
die("Fatal error! {$upload_dir} is not writable. Set 'chmod 777 {$upload_dir}'
or something like this");
fclose($f);
unlink($tf);

//處理上傳的文件
if (isset($_POST['fileframe']))
{
 $result = 'ERROR';
 $result_msg = 'No FILE field found';

 if (isset($_FILES['file'])) // 從瀏覽器接受文件
 {
  if ($_FILES['file']['error'] == UPLOAD_ERR_OK) // 沒有錯(cuò)誤
  {
   $filename = $_FILES['file']['name']; // 文件名
   move_uploaded_file($_FILES['file']['tmp_name'], $upload_dir.'/'.$filename);
   // 處理的主過程-轉(zhuǎn)移文件到 $upload_dir
   $result = 'OK';
  }
  elseif ($_FILES['file']['error'] == UPLOAD_ERR_INI_SIZE)
   $result_msg = 'The uploaded file exceeds the upload_max_filesize directive in php.ini';
  else
   $result_msg = 'Unknown error';
 }

 echo '<html><head><title>-</title></head><body>';
 echo '<script language="JavaScript" type="text/javascript">'."\n";
 echo 'var parDoc = window.parent.document;';
 '
 if ($result == 'OK')
 {
  echo 'parDoc.getElementById("upload_status").value = "file successfully uploaded";';
  echo 'parDoc.getElementById("filename").value = "'.$filename.'";';
  echo 'parDoc.getElementById("filenamei").value = "'.$filename.'";';
  echo 'parDoc.getElementById("upload_button").disabled = false;';
 }
 else
 {
  echo 'parDoc.getElementById("upload_status").value = "ERROR: '.$result_msg.'";';
 }

 echo "\n".'</script></body></html>';
 exit();
}

function safehtml($s)
{
 $s=str_replace("&", "&", $s);
 $s=str_replace("<", "<", $s);
 $s=str_replace(">", ">", $s);
 $s=str_replace("'", "'", $s);
 $s=str_replace("\"", """, $s);
 return $s;
}

if (isset($_POST['description']))
{
 $filename = $_POST['filename'];
 $size = filesize($upload_dir.'/'.$filename);
 $date = date('r', filemtime($upload_dir.'/'.$filename));
 $description = safehtml($_POST['description']);

 $html =<<<END
 <html><head><title>{$filename} [uploaded by IFRAME Async file uploader]</title></head>
?。糱ody>
 ?。糷1>{$filename}</h1>
 ?。紁>This is a file information page for your uploaded file. Bookmark it, or send to anyone...</p>
 ?。紁>Date: {$date}</p>
 ?。紁>Size: {$size} bytes</p>
  <p>Description:
 ?。紁re>{$description}</pre>
  </p>
 ?。紁><a href="{$web_upload_dir}/{$filename}" style="font-size: large;">download file</a><br>
 ?。糰 href="{$PHP_SELF}" style="font-size: small;">back to file uploading</a><br>
  <a href="{$web_upload_dir}/upload-log.html" style="font-size: small;">upload-log</a></p>
 ?。糱r><br>Example by <a >AnyExample</a>
?。?body></html>
 END;
 
 $f = fopen($upload_dir.'/'.$filename.'-desc.html', "w");
 fwrite($f, $html);
 fclose($f);
 $msg = "File {$filename} uploaded,
?。糰 href='{$web_upload_dir}/{$filename}-desc.html'>see file information page</a>";

 $f = fopen($upload_dir."/upload-log.html", "a");
 fwrite($f, "<p>$msg</p>\n");
 fclose($f);

 setcookie('msg', $msg);
 header("Location: http://".$_SERVER['HTTP_HOST'].$PHP_SELF);
 exit();
}

if (isset($_COOKIE['msg']) && $_COOKIE['msg'] != '')
{
 if (get_magic_quotes_gpc())
  $msg = stripslashes($_COOKIE['msg']);
 else
  $msg = $_COOKIE['msg'];
  setcookie('msg', '');
}
?>
<!-- Beginning of main page -->
<html><head>
<title>IFRAME Async file uploader example</title>
</head>
<body>
<?php
 if (isset($msg))
  echo '<p style="font-weight: bold;">'.$msg.'</p>';
?>
<h1>Upload file:</h1>
<p>File will begin to upload just after selection. </p>
<p>You may write file description, while you file is being uploaded.</p>

<form action="<?=$PHP_SELF?>" target="upload_iframe" method="post" enctype="multipart/form-data">
?。糹nput type="hidden" name="fileframe" value="true">
?。?-- Target of the form is set to hidden iframe -->
?。?-- From will send its post data to fileframe section of this PHP script (see above) -->

 <label for="file">text file uploader:</label><br>
?。?-- JavaScript is called by OnChange attribute -->
?。糹nput type="file" name="file" id="file" onChange="jsUpload(this)">
</form>
<script type="text/javascript">
/* This function is called when user selects file in file dialog */
function jsUpload(upload_field)
{
 // this is just an example of checking file extensions
 // if you do not need extension checking, remove
 // everything down to line
 // upload_field.form.submit();
 
 var re_text = /\.txt|\.xml|\.zip/i;
 var filename = upload_field.value;

 /* Checking file type */
 if (filename.search(re_text) == -1)
 {
  alert("File does not have text(txt, xml, zip) extension");
  upload_field.form.reset();
  return false;
 }

 upload_field.form.submit();
 document.getElementById('upload_status').value = "uploading file...";
 upload_field.disabled = true;
 return true;
}
</script>
<iframe name="upload_iframe" style="width: 400px; height: 100px; display: none;">
</iframe>
<!-- For debugging purposes, it's often useful to remove
"display: none" from attribute -->

<br>
Upload status:<br>
<input type="text" name="upload_status" id="upload_status"
value="not uploaded" size="64" disabled>
<br><br>

File name:<br>
<input type="text" name="filenamei" id="filenamei" value="none" disabled>

<form action="<?=$PHP_SELF?>" method="POST">
?。?-- one field is "disabled" for displaying-only. Other, hidden one is for sending data -->
 <input type="hidden" name="filename" id="filename">
?。糱r><br>

?。糽abel for="photo">File description:</label><br>
 <textarea rows="5" cols="50" name="description"></textarea>

?。糱r><br>
?。糹nput type="submit" id="upload_button" value="save file" disabled>
</form>
<br><br>
<a href="<?=$web_upload_dir?>/upload-log.html">upload-log</a>
<br><br><br>

Example by <a >AnyExample</a>
</body>
</html>

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

php blob怎么轉(zhuǎn)file php blob怎么轉(zhuǎn)file Mar 16, 2023 am 10:47 AM

php blob轉(zhuǎn)file的方法:1、創(chuàng)建一個(gè)php示例文件;2、通過“function blobToFile(blob) {return new File([blob], 'screenshot.png', { type: 'image/jpeg' })}”方法實(shí)現(xiàn)Blob轉(zhuǎn)File即可。

使用java的File.length()函數(shù)獲取文件的大小 使用java的File.length()函數(shù)獲取文件的大小 Jul 24, 2023 am 08:36 AM

使用Java的File.length()函數(shù)獲取文件的大小文件大小是在處理文件操作時(shí)很常見的一個(gè)需求,Java提供了一個(gè)很方便的方法來獲取文件的大小,即使用File類的length()方法。本文將介紹如何使用該方法來獲取文件的大小,并給出相應(yīng)的代碼示例。首先,我們需要?jiǎng)?chuàng)建一個(gè)File對(duì)象來表示我們想要獲取大小的文件。以下是創(chuàng)建File對(duì)象的方法:Filef

鴻蒙原生應(yīng)用隨機(jī)詩(shī)詞 鴻蒙原生應(yīng)用隨機(jī)詩(shī)詞 Feb 19, 2024 pm 01:36 PM

想了解更多關(guān)于開源的內(nèi)容,請(qǐng)?jiān)L問:51CTO鴻蒙開發(fā)者社區(qū)https://ost.51cto.com運(yùn)行環(huán)境DAYU200:4.0.10.16SDK:4.0.10.15IDE:4.0.600一、創(chuàng)建應(yīng)用點(diǎn)擊File->newFile->CreateProgect。選擇模版:【OpenHarmony】EmptyAbility:填寫項(xiàng)目名,shici,應(yīng)用包名com.nut.shici,應(yīng)用存儲(chǔ)位置XXX(不要有中文,特殊字符,空格)。CompileSDK10,Model:Stage。Device

使用java的File.renameTo()函數(shù)重命名文件 使用java的File.renameTo()函數(shù)重命名文件 Jul 25, 2023 pm 03:45 PM

使用Java的File.renameTo()函數(shù)重命名文件在Java編程中,我們經(jīng)常需要對(duì)文件進(jìn)行重命名的操作。Java提供了File類來處理文件操作,其中的renameTo()函數(shù)可以方便地重命名文件。本文將介紹如何使用Java的File.renameTo()函數(shù)來重命名文件,并提供相應(yīng)的代碼示例。File.renameTo()函數(shù)是File類的一個(gè)方法,

使用java的File.getParent()函數(shù)獲取文件的父路徑 使用java的File.getParent()函數(shù)獲取文件的父路徑 Jul 24, 2023 pm 01:40 PM

使用java的File.getParent()函數(shù)獲取文件的父路徑在Java編程中,我們經(jīng)常需要操作文件和文件夾。有時(shí)候,我們需要獲取一個(gè)文件的父路徑,也就是該文件所在文件夾的路徑。Java的File類提供了getParent()方法用于獲取文件或文件夾的父路徑。File類是Java對(duì)文件和文件夾的抽象表示,它提供了一系列操作文件和文件夾的方法。其中,get

使用java的File.getParentFile()函數(shù)獲取文件的父目錄 使用java的File.getParentFile()函數(shù)獲取文件的父目錄 Jul 27, 2023 am 11:45 AM

使用java的File.getParentFile()函數(shù)獲取文件的父目錄在Java編程中,我們經(jīng)常需要操作文件和文件夾。當(dāng)我們需要獲取文件的父目錄時(shí),可以使用Java提供的File.getParentFile()函數(shù)來完成。本文將介紹如何使用這個(gè)函數(shù)并提供代碼示例。Java中的File類是用于操作文件和文件夾的主要類。它提供了許多方法來獲取和操作文件的屬性

如何使用Java中的File.delete()方法刪除文件或目錄? 如何使用Java中的File.delete()方法刪除文件或目錄? Nov 18, 2023 am 08:02 AM

如何使用Java中的File.delete()方法刪除文件或目錄?概述:在Java中,我們可以使用File類的delete()方法來刪除文件或目錄。該方法用于刪除指定的文件或目錄。但是需要注意的是,該方法只能刪除空目錄或者沒有被其他程序打開的文件。如果文件或目錄刪除失敗,可以通過捕獲IOException異常來查找具體原因。步驟一:導(dǎo)入相關(guān)的包首先,我們需要

使用java的File.mkdirs()函數(shù)創(chuàng)建多級(jí)目錄 使用java的File.mkdirs()函數(shù)創(chuàng)建多級(jí)目錄 Jul 24, 2023 am 11:04 AM

使用Java的File.mkdirs()函數(shù)創(chuàng)建多級(jí)目錄在Java中,我們經(jīng)常需要?jiǎng)?chuàng)建文件夾來存儲(chǔ)和組織文件。而有時(shí)候,我們需要?jiǎng)?chuàng)建多級(jí)目錄,也就是包含子文件夾的文件夾。Java提供了File類的mkdirs()函數(shù)來實(shí)現(xiàn)這個(gè)功能。File類是Java中處理文件和目錄的類,它提供了一系列操作文件和目錄的方法。其中,mkdirs()函數(shù)是創(chuàng)建多級(jí)目錄的函數(shù)。下

See all articles