WolfieeifloW WolfieeifloW - 2 months ago 6
PHP Question

PHP .doc File Upload Not Working

I have a page that I want users to be able to upload .pdf, .docx, and .doc files. The PDF and DOCX uploads are working fine, however it will not allow DOC files.

Here is my form and input button:

<form action="?action=uploadForm" method="post" enctype="multipart/form-data" style="border:1px solid black;">
<input type="file" class="btn btn-md btn-primary btn-block" name="fileToUpload" id="fileToUpload" accept=".pdf,.docx,.doc" title="PDF and Word files only" />


It seems with a DOC file that the file never gets put into
$_FILES
.

This is all of my file validation/uploading logic:

if (isset($_GET['action']) == 'uploadForm') {
// Get the option from the dropdown, so we can upload the form to the right directory
$selectedTypeOfForm = $_POST['typeOfForm'];

$target_dir = "files/" . $selectedTypeOfForm . "/"; // The directory for the upload to go to
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]); // The name of the file being uploaded
$fileName = basename($_FILES["fileToUpload"]["name"]);
$uploadOk = 1;
$fileType = pathinfo($target_file,PATHINFO_EXTENSION);

dump($_FILES);

$_SESSION['message'] .= "<br>";

// Check if file already exists
if (file_exists($target_file)) {
$_SESSION['message'] .= "Sorry, the file <b>" . $fileName . "</b> already exists.<br>";
$uploadOk = 0;
}

// Check file size
if (($fileType == "pdf" && $_FILES["fileToUpload"]["size"] > MAXIMUM_PDF_SIZE) || ($fileType == "doc" && $_FILES["fileToUpload"]["size"] > MAXIMUM_WORD_SIZE) || ($fileType == "docx" && $_FILES["fileToUpload"]["size"] > MAXIMUM_WORD_SIZE)) {
$_SESSION['message'] .= "Sorry, the file <b>" . $fileName . "</b> is too large. The file must be under ";

if ($fileType == "pdf") {
$_SESSION['message'] .= (MAXIMUM_PDF_SIZE / 1000000) . "MB for a PDF.<br>";
} else {
$_SESSION['message'] .= (MAXIMUM_WORD_SIZE / 1000000) . "MB for a Word document.<br>";
}

$uploadOk = 0;
}

// Allow certain file formats
if($fileType != "pdf" && $fileType != "doc" && $fileType != "docx") {
$_SESSION['message'] .= "Sorry, only PDF, DOC, and DOCX files are allowed. You tried to upload a <b>" . strtoupper($fileType) . "</b>.<br>";
$uploadOk = 0;
}

// FINAL UPLOAD
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
$_SESSION['message'] .= "<br>Sorry, your file <b>" . $fileName . "</b> was not uploaded.<br>";
// if everything is ok, try to upload file
} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
$_SESSION['message'] .= "<br>The file <b>" . basename($_FILES["fileToUpload"]["name"]) . "</b> has been uploaded.<br>";
} else {
$_SESSION['message'] .= "<br>Sorry, there was an error uploading the file <b>" . $fileName . "</b>.<br>";
}
}

// header('Location:/forms.php');
echo "<a href='/forms.php'>FORMS</a>";
exit;
}


And uploading a .DOC file shows the following messages:

Sorry, the file already exists.
Sorry, only PDF, DOC, and DOCX files are allowed. You tried to upload a .

Sorry, your file was not uploaded.

Answer

The issue was with upload_max_filesize and post_max_size in php.ini. The file was gone before my code ever touched it because these values were set to below the size of the .doc files I was trying to upload.