ホームページ バックエンド開発 PHPチュートリアル PHPの進歩とともにアップロードファイルを作るというアイデア

PHPの進歩とともにアップロードファイルを作るというアイデア

Jun 06, 2018 pm 03:05 PM
php

この記事では主に PHP でファイルをアップロードする方法を紹介します。興味のある方はぜひ参考にしてください。

php 大きなファイルのプログレッシブアップロードは、常に PHP プログラマーを悩ませる問題です。 baiduやGoogleで調べてみると、進行状況付きアップロードの一般的な方法は、flash+php、socket、apc+phpなどです。 以下に、apc +php+ajaxで作成した進行状況付きアップロードを紹介し、ソースコードを掲載します。皆様のお役に立てば幸いです。
Alternative PHP Cache (APC) は、無料で公開されている、PHP 用に最適化されたコード キャッシュです。これは、PHP 中間コードをキャッシュおよび最適化するための、無料でオープンかつ堅牢なフレームワークを提供するために使用されます。

apcを使用する場合、最初にapcモジュールをインストールする必要があります。
ステップ 1: php_apc.dll をダウンロードします

ステップ 2: php.ini が apc 拡張モジュールをサポートするようにします。 php_apc.dll を ext ディレクトリに置き、php.ini を開いて以下を追加します:
extension=php_apc.dll
apc.rfc1867 = on
apc.max_file_size = 100M
Upload_max_filesize = 100M
Post_max_size = 100M
/ /上記のパラメータは自分で定義できます

ステップ 3: PHP APC がサポートされているかどうかを確認します

 if (function_exists('apc_fetch')) {
 echo 'it surpport apc model!';
 } else {
 echo "it's not support apc model!";
 }
 ?>
ログイン後にコピー

本題に入りましょう:原則: ajas を使用してキャッシュから読み取りますAPC モジュールのアップロードの進行状況。詳細については、次を参照してください:
Index.php

<?php
 $unid=uniqid("");//确定唯一标致,实现多人同时上传
?>
<p class="userinput2">
 <p id="captions">先将你要上传的软件上传服务器,上传时请耐心等候...<span class="style1"><br />
 </span>
 <script type="text/javascript" >
 var xmlHttp;
 var proNum=0;
 var loop=0;
 //初始化xmlHttp
 function createxml(){
 var xmlHttp;
 if(window.XMLHttpRequest){
 xmlHttp=new XMLHttpRequest();
 }else{
 xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
 }
 return xmlHttp;
 }
 xmlHttp=createxml();
 //ajas操作
 function sendURL() {
 var url="getprogress.php?progress_key=<?php echo $unid;?>";
 xmlHttp.open("GET",url,false);
 if (window.navigator.userAgent.indexOf("Firefox")>=1){
 //如果是firefox3.0
 xmlHttp.send("progress_key=<?php echo $unid;?>");
 if(xmlHttp.status==200) doHttpReadyStateChange();
 
 }else{
 xmlHttp.onreadystatechange = doHttpReadyStateChange;
 xmlHttp.send("progress_key=<?php echo $unid;?>");
 }
 }
 //回调函数
 function doHttpReadyStateChange() {
 if (xmlHttp.readyState== 4){
 proNum=parseInt(xmlHttp.responseText);
 //alert(proNum);
 document.getElementByIdx_x("progressinner").style.width = proNum+"%";
 document.getElementByIdx_x("showNum").innerHTML = proNum+"%";
 if ( proNum < 100){
 setTimeout("sendURL()", 200);
 }else{
 //上传成功后,还不能及时得到信息。还希望高人指点
 document.getElementByIdx_x("progressouter").style.display="none";
 document.getElementByIdx_x("progressinner").style.display="none";
 document.getElementByIdx_x("showNum").style.display="none";
 document.getElementByIdx_x("theframe").style.display="none";
 document.getElementByIdx_x("link2").style.display="block";
 }
 
 }
 }
 function startProgress(){
 document.getElementByIdx_x("progressouter").style.display="block";
 setTimeout("sendURL()", 200);
 }
 function newsofturl(text){
 document.getElementByIdx_x("link2").style.display="block";
 document.getElementByIdx_x("link2").value=text;
 }
 </script>
 <iframe id="theframe" name="theframe" src="softupload.php?id=<?php echo($unid); ?>" style="border: 0; height: 80px; width: 400px; " frameborder="0" scrolling="no" > </iframe>
 <input name="linkdefult" type="hidden" id="linkdefult" value="0" />
 <br />
 <p id="link2" style="display:none;" > <font size=2>上传成功!    文件大小为:
 <input type="text" name="filesize" id="filesize" style="width:50px;"/>
 </font><br>
 <br>
 <font size=2>文件下载地址为:</font><br />
 <input type=text name=&#39;link&#39; id=&#39;link&#39; style=&#39;width:380px;&#39; />
 </p>
 <br/>
 <p id="progressouter" style="width: 500px; height: 20px; border: 1px solid #000000; display:none;">
 <p id="progressinner" style="position: relative; height: 20px; background-color: #333333; width: 0%; "></p>
 </p>
 <p id=&#39;showNum&#39; style="font-size:12px; color:#333333"></p>
 </p>
</p>
ログイン後にコピー

softupload.php

<?php
 $id = $_GET[&#39;id&#39;];
?>
<script language="javascript">
//Trim the input text
function Trim(input)
{
 var lre = /^\s*/;
 var rre = /\s*$/;
 input = input.replace(lre, "");
 input = input.replace(rre, "");
 return input;
 }
function CheckForTestFile()
 {
 var file = document.getElementByIdx_x(&#39;Softfile&#39;);
 var fileName=file.value; 
 //Checking for file browsed or not
 if (Trim(fileName) ==&#39;&#39; )
 {
 alert("请为上传选择一个文件!!!");
 file.focus();
 return false;
 }
 //Setting the extension array for diff. type of text files
 var extArray = new Array(".rar", ".zip", ".exe", ".gz"); 
 //getting the file name
 while (fileName.indexOf("\") != -1)
 fileName = fileName.slice(fileName.indexOf("\") + 1);

 //Getting the file extension  
 var ext = fileName.slice(fileName.indexOf(".")).toLowerCase();
 for (var i = 0; i < extArray.length; i++)
 {
 if (extArray[i] == ext)
 {
 window.parent.startProgress(); return true;
 }
 }
 alert("正确的文件格式为" + (extArray.join(" ")) + "\n请选择一个新的 " + "文件提交上传.");
 file.focus();
 return false; 
 } 
</script> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<form enctype="multipart/form-data" id="upload_form" action="target.php" method="POST">
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="<?php echo $id?>"/>
<table width="322" border="0" cellpadding="0" cellspacing="0" id="linkTable">

 <tr>
 <td >1.选择软件<br />

 <input name="Softfile" type="file" id="Softfile" /></td>
 <td ><br />
 <input name="submit" type="submit" onclick="return CheckForTestFile();" value="上传软件"/></td>
 </tr>
 </table>
</form>
ログイン後にコピー

target.php

<script language="javascript">
//将上传后的信息返还给父窗口
function chuanzhi(){
parent.document.getElementByIdx_x(&#39;filesize&#39;).value=document.getElementByIdx_x(&#39;size&#39;).value;
parent.document.getElementByIdx_x(&#39;link&#39;).value=document.getElementByIdx_x(&#39;newsoftdir&#39;).value;
parent.document.getElementByIdx_x(&#39;linkdefult&#39;).value=1;
}
</script>
<body onLoad="chuanzhi();">
<?php
//header(&#39;Content-Type:text/html;charset=gb2312&#39;);
define(&#39;SOFTDIR&#39;, "./upload/"); //上传后路径
define(&#39;HTTPSOFTDIR&#39;, "http://www.mysite.com/"); //服务器的路径

//判断上传软件后缀名是否允许
function isSoftExt($extension) {
 $ext = array(&#39;exe&#39;, &#39;rar&#39;, &#39;zip&#39;,&#39;gz&#39;);
 return in_array($extension, $ext) ? true : false;
}
if($_SERVER[&#39;REQUEST_METHOD&#39;]==&#39;POST&#39;){
$errors[&#39;0&#39;] = true;
$errors[&#39;1&#39;] = &#39;请选择上传的软件图片&#39;;
$errors[&#39;2&#39;] = &#39;上传软件图片失败&#39;;
$errors[&#39;3&#39;] = &#39;上传软件图片失败&#39;;
$daytime = date(&#39;Y-m-d-h-m-s&#39;);
$timename=str_replace("-","",$daytime); //取得当天的日期时间


 //检查软件是否是正常上传的
 if(!is_uploaded_file($_FILES[&#39;Softfile&#39;][&#39;tmp_name&#39;])) {
 echo "<script>alert(&#39;非正常上传!&#39;);history.back();</script>";
 exit;
 }
 $extension = pathinfo($_FILES[&#39;Softfile&#39;][&#39;name&#39;], PATHINFO_EXTENSION);
 $filename = $timename."_".$_FILES[&#39;Softfile&#39;][&#39;name&#39;];
 $tmpsize=$_FILES[&#39;Softfile&#39;][&#39;size&#39;];
 $msize=round($tmpsize/1048576 , 2) ."M";
 $ksize=round($tmpsize/1024 ,2). "K";
 $filesize =$tmpsize>1048576?$msize:$ksize;
 //检查软件文件格式
 if(!isSoftExt($extension)) {
 echo "<script>alert(&#39;上传的软件格式有错误!&#39;);history.back();</script>";
 exit;
 } 
 //移动软件
 if(!move_uploaded_file($_FILES[&#39;Softfile&#39;][&#39;tmp_name&#39;], SOFTDIR. $filename)) {
 echo "<script>alert(&#39;移动软件出错!&#39;);history.back();</script>";
 exit;
 }else{
 echo "<font size=2>上传成功!    文件大小为:<input type=text id=&#39;size&#39; value=&#39;$filesize&#39;></font><br>";
 echo "<font size=2>文件下载地址为:</font><input type=text id=&#39;newsoftdir&#39; value=&#39;".HTTPSOFTDIR.$filename."&#39; style=&#39;width=380&#39;>";
 }
}else
echo "请不要直接输入地址!";

?>
ログイン後にコピー

getprogress.php

<?php
//上传ajas获取进度页面
session_start();
if(isset($_GET[&#39;progress_key&#39;])) {
 $status = apc_fetch(&#39;upload_&#39;.$_GET[&#39;progress_key&#39;]);
 echo ($status[&#39;current&#39;]/$status[&#39;total&#39;])*100;
}
echo &#39;APC_FILE=&#39;.APC_FILE;
?>
ログイン後にコピー

概要: 上記がこの記事の全内容です。お役に立てれば幸いです。皆さんの学びが役に立ちます。

関連する推奨事項:

PHP での PDO のトランザクション処理方法と分析例

PHP での __autoload と Smarty 間の競合の詳細な解決策

PHP での PDO を使用したデータベース操作の文字化け問題の解決策と例PHP

以上がPHPの進歩とともにアップロードファイルを作るというアイデアの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Ubuntu および Debian 用の PHP 8.4 インストールおよびアップグレード ガイド Dec 24, 2024 pm 04:42 PM

PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

CakePHP データベースの操作 CakePHP データベースの操作 Sep 10, 2024 pm 05:25 PM

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。

CakePHP の日付と時刻 CakePHP の日付と時刻 Sep 10, 2024 pm 05:27 PM

Cakephp4 で日付と時刻を操作するには、利用可能な FrozenTime クラスを利用します。

CakePHP ファイルのアップロード CakePHP ファイルのアップロード Sep 10, 2024 pm 05:27 PM

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP ルーティング CakePHP ルーティング Sep 10, 2024 pm 05:25 PM

この章では、ルーティングに関連する次のトピックを学習します。

CakePHP について話し合う CakePHP について話し合う Sep 10, 2024 pm 05:28 PM

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP バリデータの作成 CakePHP バリデータの作成 Sep 10, 2024 pm 05:26 PM

Validator は、コントローラーに次の 2 行を追加することで作成できます。

CakePHP のロギング CakePHP のロギング Sep 10, 2024 pm 05:26 PM

CakePHP へのログインは非常に簡単な作業です。使用する関数は 1 つだけです。 cronjob などのバックグラウンド プロセスのエラー、例外、ユーザー アクティビティ、ユーザーが実行したアクションをログに記録できます。 CakePHP でのデータのログ記録は簡単です。 log()関数が提供されています

See all articles