Can file uploads time out in PHP?
You need a proper value for the following php.ini settings:
- max_input_time (not max_execution_time!)
- upload_max_filesize
- post_max_size
and maybe
- memory_limit
Upload large files and Time out php uploads
Resolved with: https://www.plupload.com/
<div id="uploader">
<p>Your browser doesnt have Flash, Silverlight or HTML5 support.</p>
</div>
<link href="https://rawgithub.com/moxiecode/plupload/master/js/jquery.plupload.queue/css/jquery.plupload.queue.css" type="text/css" rel="stylesheet" media="screen">
<script type="text/javascript" src="assets/uploads/jquery-ui.js"></script>
<script type="text/javascript" src="assets/uploads/plupload.full.min.js"></script>
<script type="text/javascript" src="assets/uploads/jquery.plupload.queue/jquery.plupload.queue.min.js"></script>
<script type="text/javascript" src="assets/uploads/jquery.ui.plupload/jquery.ui.plupload.min.js"></script>
<link type="text/css" rel="stylesheet" href="assets/uploads/jquery.ui.plupload/css/jquery.ui.plupload.css" media="screen" />
<script type="text/javascript" src="assets/uploads/i18n/pt_BR.js"></script>
<script type="text/javascript">
$(function() {
$("#uploader").plupload({
// General settings
runtimes : 'html5,flash,silverlight,html4',
url : "controller/xml_upload.php",
// Maximum file size
max_file_size : '2048mb',
chunk_size: '1mb',
// Specify what files to browse for
filters : [
{title : "XML", extensions : "xml"}
],
// Rename files by clicking on their titles
rename: true,
// Sort files
sortable: true,
// Enable ability to drag'n'drop files onto the widget (currently only HTML5 supports that)
dragdrop: false,
// Views to activate
views: {
list: false,
thumbs: false, // Show thumbs
active: 'thumbs'
},
// Flash settings
flash_swf_url : '/videos_add1_up/Moxie.swf',
// Silverlight settings
silverlight_xap_url : '/videos_add1_up/Moxie.xap',
multipart_params : {
"xml_usuario" : "xml_user"
}
});
});
</script>
PHP
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");
@set_time_limit(5 * 60);
$targetDir = '../../assets/arquivos/xml/';
$cleanupTargetDir = true;
$maxFileAge = 5 * 3600;
if (!file_exists($targetDir)) {
@mkdir($targetDir);
}
if (isset($_REQUEST["name"])) {
$fileName = $_REQUEST["name"];
} elseif (!empty($_FILES)) {
$fileName = $_FILES["file"]["name"];
} else {
$fileName = uniqid("file_");
}
include '../../_config.php';
$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;
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);
}
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);
}
How do I prevent a Request Timeout when uploading a file in PHP?
I did some more tests and I cannot upload files over 200kb on any site.
It seems that it may have something to do with my OS (Windows 7 RC2). My girlfriend is on Vista and it works without a problem and I have an XP virtual machine installed which also works.
Request timing out when trying to upload file
Please Update your Max Execution Time in your php.ini file, also PHP server can cause issue's with post requests try switch to apache or xamp server. For more info: https://laracasts.com/discuss/channels/code-review/file-upload-using-guzzle-client
Related Topics
Which Is Faster in PHP, $Array[] = $Value or Array_Push($Array, $Value)
How to Sort a Multidimensional Array by One of the Fields of the Inner Array in PHP
How to Group a Multidimensional Array by a Particular Subarray Value
PHP, MySQL Error: Column Count Doesn't Match Value Count At Row 1
Page Redirect After Certain Time PHP
How to Clear Browser Cache With PHP
Delete Multiple Rows by Selecting Checkboxes Using PHP
What Is the Syntax For Accessing PHP Object Properties
File_Get_Contents =≫ PHP Fatal Error: Allowed Memory Exhausted
Checking to See If One Array'S Elements Are in Another Array in PHP
Why I'M Getting 500 Error When Using File_Get_Contents(), But Works in a Browser
Redirecting to Previous Page After Login - PHP
PHP: Sort and Count Instances of Words in a Given String
How to Strip a Tag and All of Its Inner HTML Using the Tag'S Id
PHPunit Assert That an Exception Was Thrown
Convert Time and Date from One Time Zone to Another in PHP
Byethost Server Passing HTML Values "Checking Your Browser" With Json String