Can File Uploads Time Out in PHP

Can file uploads time out in PHP?

You need a proper value for the following php.ini settings:

  1. max_input_time (not max_execution_time!)
  2. upload_max_filesize
  3. post_max_size

and maybe


  1. 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



Leave a reply



Submit