Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Improve error messages when hitting PHP file upload issues

Summary: See T429. When you hit certain errors, you get less-than-helpful
messages like "upload error 3". Instead, produce human-readable errors.
Test Plan: Simulated errors, verified user receives decent error messages.
Reviewed By: aran
Reviewers: jungejason, tuomaspelkonen, aran, startupguy
CC: aran
Differential Revision: 816
  • Loading branch information...
commit 735847865c243152e3ff1a0158c4ce9fff6dba6c 1 parent ec0d91a
@epriestley epriestley authored
View
1  src/__phutil_library_map__.php
@@ -420,6 +420,7 @@
'PhabricatorFileTransformController' => 'applications/files/controller/transform',
'PhabricatorFileURI' => 'applications/files/uri',
'PhabricatorFileUploadController' => 'applications/files/controller/upload',
+ 'PhabricatorFileUploadException' => 'applications/files/exception/upload',
'PhabricatorFileViewController' => 'applications/files/controller/view',
'PhabricatorGarbageCollectorDaemon' => 'infrastructure/daemon/garbagecollector',
'PhabricatorGoodForNothingWorker' => 'infrastructure/daemon/workers/worker/goodfornothing',
View
43 src/applications/files/exception/upload/PhabricatorFileUploadException.php
@@ -0,0 +1,43 @@
+<?php
+
+/*
+ * Copyright 2011 Facebook, Inc.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+final class PhabricatorFileUploadException extends Exception {
+
+ public function __construct($code) {
+ $map = array(
+ UPLOAD_ERR_INI_SIZE =>
+ "Uploaded file is too large: file is larger than the ".
+ "'upload_max_size' setting in php.ini.",
+ UPLOAD_ERR_FORM_SIZE =>
+ "File is too large.",
+ UPLOAD_ERR_PARTIAL =>
+ "File was only partially transferred, upload did not complete.",
+ UPLOAD_ERR_NO_FILE =>
+ "No file was uploaded.",
+ UPLOAD_ERR_NO_TMP_DIR =>
+ "Unable to write file: temporary directory does not exist.",
+ UPLOAD_ERR_CANT_WRITE =>
+ "Unable to write file: failed to write to temporary directory.",
+ UPLOAD_ERR_EXTENSION =>
+ "Unable to upload: a PHP extension stopped the upload.",
+ );
+
+ $message = idx($map, $code, "Upload failed: unknown error.");
+ parent::__construct($message, $code);
+ }
+}
View
12 src/applications/files/exception/upload/__init__.php
@@ -0,0 +1,12 @@
+<?php
+/**
+ * This file is automatically generated. Lint this module to rebuild it.
+ * @generated
+ */
+
+
+
+phutil_require_module('phutil', 'utils');
+
+
+phutil_require_source('PhabricatorFileUploadException.php');
View
2  src/applications/files/storage/file/PhabricatorFile.php
@@ -48,7 +48,7 @@ public static function newFromPHPUpload($spec, array $params = array()) {
$err = idx($spec, 'error');
if ($err) {
- throw new Exception("File upload failed with error '{$err}'.");
+ throw new PhabricatorFileUploadException($err);
}
$tmp_name = idx($spec, 'tmp_name');
View
1  src/applications/files/storage/file/__init__.php
@@ -6,6 +6,7 @@
+phutil_require_module('phabricator', 'applications/files/exception/upload');
phutil_require_module('phabricator', 'applications/files/storage/base');
phutil_require_module('phabricator', 'applications/files/uri');
phutil_require_module('phabricator', 'applications/phid/constants');
Please sign in to comment.
Something went wrong with that request. Please try again.