These results are based on our legacy PHP analysis, consider migrating to our new PHP analysis engine instead. Learn more
1 | <?php |
||
2 | /** |
||
3 | * upload.php |
||
4 | * |
||
5 | * Copyright 2013, Moxiecode Systems AB |
||
6 | * Released under GPL License. |
||
7 | * |
||
8 | * License: http://www.plupload.com/license |
||
9 | * Contributing: http://www.plupload.com/contributing |
||
10 | */ |
||
11 | |||
12 | #!! IMPORTANT: |
||
13 | #!! this file is just an example, it doesn't incorporate any security checks and |
||
14 | #!! is not recommended to be used in production environment as it is. Be sure to |
||
15 | #!! revise it and customize to your needs. |
||
16 | |||
17 | |||
18 | // Make sure file is not cached (as it happens for example on iOS devices) |
||
19 | header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); |
||
20 | header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); |
||
21 | header("Cache-Control: no-store, no-cache, must-revalidate"); |
||
22 | header("Cache-Control: post-check=0, pre-check=0", false); |
||
23 | header("Pragma: no-cache"); |
||
24 | |||
25 | /* |
||
0 ignored issues
–
show
|
|||
26 | // Support CORS |
||
27 | header("Access-Control-Allow-Origin: *"); |
||
28 | // other CORS headers if any... |
||
29 | if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') { |
||
30 | exit; // finish preflight CORS requests here |
||
31 | } |
||
32 | */ |
||
33 | |||
34 | // 5 minutes execution time |
||
35 | @set_time_limit(5 * 60); |
||
36 | |||
37 | // Uncomment this one to fake upload time |
||
38 | // usleep(5000); |
||
39 | |||
40 | // Settings |
||
41 | $targetDir = ini_get("upload_tmp_dir") . DIRECTORY_SEPARATOR . "plupload"; |
||
42 | //$targetDir = 'uploads'; |
||
0 ignored issues
–
show
Unused Code
Comprehensibility
introduced
by
50% of this comment could be valid code. Did you maybe forget this after debugging?
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it. The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production. This check looks for comments that seem to be mostly valid code and reports them.
Loading history...
|
|||
43 | $cleanupTargetDir = true; // Remove old files |
||
44 | $maxFileAge = 5 * 3600; // Temp file age in seconds |
||
45 | |||
46 | |||
47 | // Create target dir |
||
48 | if (!file_exists($targetDir)) { |
||
49 | @mkdir($targetDir); |
||
50 | } |
||
51 | |||
52 | // Get a file name |
||
53 | if (isset($_REQUEST["name"])) { |
||
54 | $fileName = $_REQUEST["name"]; |
||
55 | } elseif (!empty($_FILES)) { |
||
56 | $fileName = $_FILES["file"]["name"]; |
||
57 | } else { |
||
58 | $fileName = uniqid("file_"); |
||
59 | } |
||
60 | |||
61 | $filePath = $targetDir . DIRECTORY_SEPARATOR . $fileName; |
||
62 | |||
63 | // Chunking might be enabled |
||
64 | $chunk = isset($_REQUEST["chunk"]) ? intval($_REQUEST["chunk"]) : 0; |
||
65 | $chunks = isset($_REQUEST["chunks"]) ? intval($_REQUEST["chunks"]) : 0; |
||
66 | |||
67 | |||
68 | // Remove old temp files |
||
69 | if ($cleanupTargetDir) { |
||
70 | if (!is_dir($targetDir) || !$dir = opendir($targetDir)) { |
||
71 | die('{"jsonrpc" : "2.0", "error" : {"code": 100, "message": "Failed to open temp directory."}, "id" : "id"}'); |
||
72 | } |
||
73 | |||
74 | while (($file = readdir($dir)) !== false) { |
||
75 | $tmpfilePath = $targetDir . DIRECTORY_SEPARATOR . $file; |
||
76 | |||
77 | // If temp file is current file proceed to the next |
||
78 | if ($tmpfilePath == "{$filePath}.part") { |
||
79 | continue; |
||
80 | } |
||
81 | |||
82 | // Remove temp file if it is older than the max age and is not the current file |
||
83 | if (preg_match('/\.part$/', $file) && (filemtime($tmpfilePath) < time() - $maxFileAge)) { |
||
84 | @unlink($tmpfilePath); |
||
85 | } |
||
86 | } |
||
87 | closedir($dir); |
||
88 | } |
||
89 | |||
90 | |||
91 | // Open temp file |
||
92 | if (!$out = @fopen("{$filePath}.part", $chunks ? "ab" : "wb")) { |
||
93 | die('{"jsonrpc" : "2.0", "error" : {"code": 102, "message": "Failed to open output stream."}, "id" : "id"}'); |
||
94 | } |
||
95 | |||
96 | if (!empty($_FILES)) { |
||
97 | if ($_FILES["file"]["error"] || !is_uploaded_file($_FILES["file"]["tmp_name"])) { |
||
98 | die('{"jsonrpc" : "2.0", "error" : {"code": 103, "message": "Failed to move uploaded file."}, "id" : "id"}'); |
||
99 | } |
||
100 | |||
101 | // Read binary input stream and append it to temp file |
||
102 | if (!$in = @fopen($_FILES["file"]["tmp_name"], "rb")) { |
||
103 | die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); |
||
104 | } |
||
105 | } else { |
||
106 | if (!$in = @fopen("php://input", "rb")) { |
||
107 | die('{"jsonrpc" : "2.0", "error" : {"code": 101, "message": "Failed to open input stream."}, "id" : "id"}'); |
||
108 | } |
||
109 | } |
||
110 | |||
111 | while ($buff = fread($in, 4096)) { |
||
112 | fwrite($out, $buff); |
||
113 | } |
||
114 | |||
115 | @fclose($out); |
||
116 | @fclose($in); |
||
117 | |||
118 | // Check if file has been uploaded |
||
119 | if (!$chunks || $chunk == $chunks - 1) { |
||
120 | // Strip the temp .part suffix off |
||
121 | rename("{$filePath}.part", $filePath); |
||
122 | } |
||
123 | |||
124 | // Return Success JSON-RPC response |
||
125 | die('{"jsonrpc" : "2.0", "result" : null, "id" : "id"}'); |
||
126 |
Sometimes obsolete code just ends up commented out instead of removed. In this case it is better to remove the code once you have checked you do not need it.
The code might also have been commented out for debugging purposes. In this case it is vital that someone uncomments it again or your project may behave in very unexpected ways in production.
This check looks for comments that seem to be mostly valid code and reports them.