PHP入门

2020-03-08  本文已影响0人  小桥流水啦啦啦

PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP 是免费的,并且使用广泛。学习服务器端脚本语言首选PHP。

PHP 文件打开/读取/读取/创建/写入

下面这个脚本摘自于plupload-2.13源码中的demo。

<?php
/**

!! IMPORTANT:

!! this file is just an example, it doesn't incorporate any security checks and

!! is not recommended to be used in production environment as it is. Be sure to

!! revise it and customize to your needs.

// Make sure file is not cached (as it happens for example on iOS devices)
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");

/*
// Support CORS
header("Access-Control-Allow-Origin: *");
// other CORS headers if any...
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
exit; // finish preflight CORS requests here
}
*/

// 5 minutes execution time
@set_time_limit(5 * 60);

// Uncomment this one to fake upload time
// usleep(5000);

// Settings
targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; //targetDir = 'uploads';
cleanupTargetDir = true; // Remove old filesmaxFileAge = 5 * 3600; // Temp file age in seconds

/*
服务器端接受plupload上传的文件,保存在临时目录的最长时间是$maxFileAge;时间到这个文件自动删除;
*/

// Create target dir
if (!file_exists(targetDir)) { @mkdir(targetDir);
}

// Get a file name
if (isset(_REQUEST["name"])) {fileName = _REQUEST["name"]; } elseif (!empty(_FILES)) {
fileName =FILES["file"]["name"];
} else {
$fileName = uniqid("file
");
}

filePath =targetDir . DIRECTORY_SEPARATOR . $fileName;

// Chunking might be enabled
chunk = isset(_REQUEST["chunk"]) ? intval(_REQUEST["chunk"]) : 0;chunks = isset(_REQUEST["chunks"]) ? intval(_REQUEST["chunks"]) : 0;

// Remove old temp files
if (cleanupTargetDir) { if (!is_dir(targetDir) || !dir = opendir(targetDir)) {
die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}');
}

while ((file = readdir(dir)) !== false) {
tmpfilePath =targetDir . DIRECTORY_SEPARATOR . $file;

// If temp file is current file proceed to the next
if (tmpfilePath == "{filePath}.part") {
continue;
}

// Remove temp file if it is older than the max age and is not the current file
if (preg_match('/.part/',file) && (filemtime(tmpfilePath) < time() -maxFileAge)) {
@unlink(tmpfilePath); } } closedir(dir);
}

// Open temp file
if (!out = @fopen("{filePath}.part", $chunks ? "ab" : "wb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}');
}

if (!empty(_FILES)) { if (_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) {
die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}');
}

// Read binary input stream and append it to temp file
if (!in = @fopen(_FILES["file"]["tmp_name"], "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
} else {
if (!$in = @fopen("php://input", "rb")) {
die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}');
}
}

while (buff = fread(in, 4096)) {
fwrite(out,buff);
}

@fclose(out); @fclose(in);

// Check if file has been uploaded
if (!chunks ||chunk == chunks - 1) { // Strip the temp .part suffix off rename("{filePath}.part", $filePath);
}

// Return Success JSON-RPC response
die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}');

上一篇下一篇

猜你喜欢

热点阅读