Heim >Backend-Entwicklung >PHP-Tutorial >Beispiel für die Freigabe von PHP mithilfe des APC-Moduls zur Implementierung des Upload-Fortschrittsbalkens

Beispiel für die Freigabe von PHP mithilfe des APC-Moduls zur Implementierung des Upload-Fortschrittsbalkens

*文
*文Original
2017-12-25 14:13:311577Durchsuche

Dieser Artikel stellt hauptsächlich vor, wie PHP das APC-Modul verwendet, um den Fortschrittsbalken für das Hochladen von Dateien zu implementieren, analysiert die spezifische Verwendung des APC-Moduls und gibt APC-bezogene Konfigurationsanweisungen. Ich hoffe, es hilft allen.

Frühere Versionen von PHP5.2 können das APC-Modul nicht verwenden, da es überhaupt kein solches APC-Modul gibt. Wenn Sie das APC-Modul zum Implementieren des Upload-Fortschrittsbalkens verwenden möchten, müssen wir PHP5.2 oder sein höher. Version.

Ab 5.2 hat APC etwas namens APC_UPLOAD_PROGRESS hinzugefügt, das das Fortschrittsbalkenproblem löst, das alle schon seit langem beschäftigt. Außerdem wurde die ursprüngliche Methode zum Zwischenspeichern aller temporären Dateien im Speicher während des Hochladens dahingehend geändert, dass sie automatisch auf der Festplatte gespeichert werden, wenn die temporären Dateien den festgelegten Wert erreichen, was die Speichernutzung effektiv verbessert.

Es funktioniert, indem jedem Upload beim Hochladen eine eindeutige ID zugewiesen wird. Wenn das PHP-Skript eine hochgeladene Datei empfängt, überprüft der Interpreter automatisch das versteckte Feld mit dem Namen APC_UPLOAD_PROGRESS im Array $_POST speichert Informationen über den Upload, sodass Skripte über die Upload-ID auf Statusinformationen über die hochgeladene Datei zugreifen können.

APC ist die Abkürzung für Alternative PHP Cache, einen kostenlosen und öffentlichen optimierten Code-Cache für PHP. Es wird verwendet, um ein kostenloses, offenes und robustes Framework zum Zwischenspeichern und Optimieren von PHP-Zwischencode bereitzustellen.

Parameterkonfiguration des APC-Moduls, der Code lautet wie folgt:

Name Default Changeable Changelog  
apc.enabled 1 PHP_INI_ALL  
apc.shm_segments 1 PHP_INI_SYSTEM  
apc.shm_size 30 PHP_INI_SYSTEM  
apc.optimization 0 PHP_INI_ALL  
apc.num_files_hint 1000 PHP_INI_SYSTEM  
apc.ttl 0 PHP_INI_SYSTEM  
apc.gc_ttl 3600 PHP_INI_SYSTEM  
apc.cache_by_default On PHP_INI_SYSTEM  
apc.filters "" PHP_INI_SYSTEM  
apc.mmap_file_mask "" PHP_INI_SYSTEM  
apc.slam_defense 0 PHP_INI_SYSTEM  
apc.file_update_protection 2 PHP_INI_SYSTEM  
apc.enable_cli 0 PHP_INI_SYSTEM > APC 3.0.6


Sobald die Konfiguration abgeschlossen ist, beginnen Sie jetzt mit dem Schreiben des Programms

Der XML/HTML-Code lautet wie folgt:

<!–以下为上传表单–>  
<form enctype="multipart/form-data" id="upload_form" action="" method="POST">  
<input type="hidden" name="APC_UPLOAD_PROGRESS" id="progress_key" value="upid"/>  
视频标题:<input type="text" id="subject" name="subject"/>  
视频说明:<input type="text" id="content" name="content"/>  
视频TAG(以逗号分割)<input type="text" id="tag" name="tags"/>  
<input type="file" id="upfile" name="upfile"/>  
<input type="submit" id="filesubmit" value="上传" onclick="startProgress(&#39;upid&#39;); return true;"/>  
<!–注意:startProgress(&#39;upid&#39;)中的参数是你从php中分配的唯一上传参数–>  
</form>  
<!–以下为上传进度条–>  
<p id="upstatus" style="width: 500px; height: 30px; border: 1px solid ##ffffde; color:#796140;">  
</p  
<p id="progressouter" style="width: 500px; height: 20px; border: 3px solid #de7e00; display:none;">  
<p id="progressinner" style="position: relative; height: 20px; color:#796140; background-color: #f6d095; width: 0%; "></p>  
</p>

Das Wichtigste ist das versteckte Feld von APC_UPLOAD_PROGRESS, mit dem das Skript auf den Status zugreifen kann aktuell hochgeladene Datei, und fügen Sie eine weitere hinzu, um den Upload-Status anzuzeigen.

Das Folgende ist ein Skript zur Verarbeitung von Ajax. Ich habe das JQuery-Framework und JSON zum Übertragen von Nachrichten verwendet.

Der JavaScript-Code lautet wie folgt:

function getProgress(upid){  
var url = "<{$siteurl}>epadmin/upprocess";  
$.getJSON(  
url,  
{ progress_key: upid },  
function(json){  
$("#progressinner").width(json.per+"%");  
$("#upstatus").html(&#39;文件大小:&#39;+json.total+&#39;KB&#39;+&#39; 已上传:&#39;+json.current+&#39;KB&#39;);  
if (json.per < 100){  
setTimeout(function(){  
getProgress(upid);  
}, 10);  
}else{  
$("#upstatus").html("视频上传完成,正在处理数据,请稍后……");  
}  
}  
)  
}  
function startProgress(upid){  
$("#progressouter").css({ display:"block" });  
setTimeout(function(){  
getProgress(upid);  
}, 100);  
}


Das Folgende ist der PHP-Code zum Lesen des Upload-Status. Was die Verarbeitung hochgeladener Dateien betrifft, Sie können ihn wie gewohnt schreiben:

//上传文件操作函数,可按照自己的需要编写  
function upflvAction()  
{  
if($_SERVER[&#39;REQUEST_METHOD&#39;]==&#39;POST&#39;){  
$subject = trim($this->f->filter($this->_request->getPost(&#39;subject&#39;)));  
$content = trim($this->f->filter($this->_request->getPost(&#39;content&#39;)));  
Zend_Loader::loadClass(&#39;Custom_FlvOp&#39;);  
$flv = new Custom_FlvOp;  
$flv->uploadFlv(&#39;upfile&#39;,$subject,$content);  
}
}  
//这就是读取上传状态的函数了~~  
function upprocessAction()  
{   
if(isset($_GET[&#39;progress_key&#39;])) {  
$status = apc_fetch(&#39;upload_&#39;.$_GET[&#39;progress_key&#39;]);  
$json = array(  
&#39;per&#39;=>$status[&#39;current&#39;]/$status[&#39;total&#39;]*100,  
&#39;total&#39;=>round($status[&#39;total&#39;]/1024),  
&#39;current&#39;=>round($status[&#39;current&#39;]/1024),  
);  
require_once("Zend/Json.php");  
echo Zend_Json::encode($json);  
}  
}


Einige Details zur APC-Konfiguration:

apc.enabled Boolean

apc.enabled kann auf 0 gesetzt werden, um APC zu deaktivieren. Dies ist hauptsächlich nützlich, wenn APC statisch in PHP kompiliert wird, da es keine andere Möglichkeit gibt, es zu deaktivieren. Beim Kompilieren in DSO können Sie die Erweiterungszeile auskommentieren in php.ini.

apc.shm_segments integer

Die Anzahl der gemeinsam genutzten Speicherblöcke, die dem Kompilierungscache zugewiesen sind, wenn APC nicht mehr über den gemeinsam genutzten Speicher verfügt und Sie apc.shm_size auf das Maximum eingestellt haben Wert, den das System zulässt, können Sie versuchen, den Wert dieses Parameters zu erhöhen.

apc.shm_size Integer

Die Größe jedes gemeinsam genutzten Speicherblocks wird in MB angegeben. Standardmäßig haben einige Systeme (einschließlich der meisten BSD-Varianten) sehr niedrige Beschränkungen für die Blockgröße des gemeinsam genutzten Speichers.

apc.optimization Integer

Optimierungsstufe. Auf 0 setzen, um die Optimierung zu deaktivieren, höhere Werte nutzen leistungsfähigere Optimierungen. Erwarten Sie bescheidene Geschwindigkeitsverbesserungen. Dies ist noch experimenteller Natur.

apc.num_files_hint integer

Hinweis für die Anzahl der verschiedenen Quelldateien, die auf Ihrem Webserver enthalten und angefordert sind. Wenn Sie sich nicht sicher sind, setzen Sie den Wert auf 0 oder lassen Sie ihn weg. Diese Einstellung ist wahrscheinlich vor allem für Websites mit Tausenden von Quelldateien nützlich.

apc.ttl Integer

Wenn ein Cache-Eintrag von einem anderen Eintrag im Cache-Bereich benötigt wird, müssen wir berücksichtigen, dass der Standort des Cache-Eintrags im Cache-Bereich frei sein darf . Anzahl der Sekunden. Wenn Sie diesen Parameter auf 0 setzen, bedeutet dies, dass Ihr Cache möglicherweise mit veralteten Einträgen gefüllt ist und neue Einträge nicht zwischengespeichert werden.

apc.gc_ttl Integer

Die Anzahl der Sekunden, die der Cache-Eintrag in der Garbage-Collection-Liste aktiv bleibt. Dieser Wert bietet Fehlerschutz für den Fall, dass eine zwischengespeicherte Quelldatei ausgeführt wird, während der Serverprozess abstürzt. Wenn diese Quelldatei geändert wird, wird der der alten Version des Cache-Eintrags zugewiesene Speicher erst zurückgefordert, wenn der durch diesen Parameter festgelegte TTL-Wert erreicht ist. Wenn Sie den Wert auf 0 setzen, wird diese Funktion deaktiviert.

apc.cache_by_default Boolean

Standardmäßig ist „Ein“ eingestellt, und mit apc.filters beginnende Dateien werden nur dann zwischengespeichert, wenn sie mit dem Filter übereinstimmen.

apc.filters String

Eine durch Kommas getrennte Liste erweiterter regulärer POSIX-Ausdrücke. Wenn ein Muster mit dem Namen der Quelldatei übereinstimmt, wird die Datei nicht zwischengespeichert. Beachten Sie, dass der für den Abgleich verwendete Dateiname der Dateiname ist, der an include/require übergeben wurde, und nicht der absolute Pfad. Wenn das erste Zeichen des regulären Ausdrucks + ist, bedeutet der Ausdruck, dass alle mit dem Ausdruck übereinstimmenden Dateien zwischengespeichert werden. Wenn das erste Zeichen - ist, werden alle Übereinstimmungen nicht zwischengespeichert. - ist der Standardwert und kann daher weggelassen werden.

apc.mmap_file_mask string

apc.slam_defense integer

Auf einem sehr ausgelasteten Server kommt es unabhängig davon, ob Sie einen Dienst starten oder eine Datei ändern, zu einem Wettlauf mehrerer Prozesse, die gleichzeitig versuchen, dieselbe Datei zwischenzuspeichern. Diese Option legt den Prozentsatz fest, bei dem der Prozess Versuche überspringt, eine nicht zwischengespeicherte Datei zwischenzuspeichern. Oder stellen Sie sich dies als die Wahrscheinlichkeit vor, dass ein einzelner Prozess den Cache überspringt. Wenn Sie beispielsweise apc.slam_defense auf 75 setzen, bedeutet dies, dass der Prozess eine 75-prozentige Chance hat, nicht zwischengespeicherte Dateien nicht zwischenzuspeichern. Je höher die Einstellung, desto wahrscheinlicher ist es daher, die Wahrscheinlichkeit einer Cache-Kollision zu verringern. Auf 0 setzen, um diese Funktion zu deaktivieren.

apc.file_update_protection integer

Wenn Sie eine Datei auf einem laufenden Server ändern, sollten Sie atomare Vorgänge ausführen. Das heißt, schreiben Sie zuerst eine temporäre Datei und benennen Sie die Datei dann in ihren endgültigen Speicherort um (mv), wenn Sie fertig sind. Viele Texteditoren, cp, tar und einige andere ähnliche Programme funktionieren nicht auf diese Weise. Dies bedeutet, dass die Möglichkeit besteht, auf die Datei zuzugreifen und sie zwischenzuspeichern, während die Datei noch geschrieben wird. Die Einstellung von apc.file_update_protection führt dazu, dass der Cache das Markieren neuer Dateien verzögert. Der Standardwert ist 2, was bedeutet, dass die Datei nicht zwischengespeichert wird, wenn festgestellt wird, dass die Änderungszeit der Datei weniger als 2 Sekunden ab der Zugriffszeit beträgt. Unglückliche Benutzer, die auf eine halb geschriebene Datei zugreifen, werden ein bizarres Verhalten feststellen, das jedoch zumindest nicht dauerhaft auftritt. Wenn Sie sicher sind, dass Sie zum Aktualisieren Ihrer Dateien häufig atomare Operationen verwenden, können Sie diesen Schutz deaktivieren, indem Sie diesen Parameter auf 0 setzen. Wenn Ihr System mit E/A-Vorgängen überlastet ist und der Aktualisierungsvorgang mehr als 2 Sekunden dauert, müssen Sie diesen Wert möglicherweise erhöhen.

apc.enable-cli integer

dient hauptsächlich zum Testen und Debuggen, um die APC-Funktionalität für die CLI-Version von PHP zu aktivieren. Im Allgemeinen werden Sie nicht bei jeder CLI-Anfrage daran denken , Portieren und Verwerfen des APC-Cache, aber für verschiedene Testsituationen ist es einfach, APC für die CLI-Version zu aktivieren

Verwandte Empfehlungen: >Beispielcode für die Verwendung des APC-Cache in PHP

Memcached PHP Memcached + APC + Datei-Cache-Kapselungs-Implementierungscode

Detaillierte Einführung in PHP OPCode Cache APC

Das obige ist der detaillierte Inhalt vonBeispiel für die Freigabe von PHP mithilfe des APC-Moduls zur Implementierung des Upload-Fortschrittsbalkens. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn