edvinson
asked on
Trouble uploading Word Doc
It seems all of a sudden having trouble uploading word documents.
Getting this error: There were the following Errors:
This form only accepts Microsoft Word Documents as valid. The header of the uploaded file returned was: application/octet-stream. If you believe this to be in error please contact the webmaster with a copy of this error message.
It's when I try to submit any application on this page: http://www.keokukhealthsystems.org/joblist-apply.php?J=51
Ideas? Code attached
CodeJobApply.txt
Getting this error: There were the following Errors:
This form only accepts Microsoft Word Documents as valid. The header of the uploaded file returned was: application/octet-stream. If you believe this to be in error please contact the webmaster with a copy of this error message.
It's when I try to submit any application on this page: http://www.keokukhealthsystems.org/joblist-apply.php?J=51
Ideas? Code attached
CodeJobApply.txt
Do you have application/msword setup as a MIME type on the server? If the server doesn't recognize the type, it will assume it is data (application/octet-stream) .
ASKER
Will, inquire of them tomorrow. thanks
Try uploading to this script. It recognizes Word by file extensions .doc and .docx and seems to work fine. See line 125.
http://www.laprbass.com/RAY_temp_edvinson.php
HTH, ~Ray
http://www.laprbass.com/RAY_temp_edvinson.php
HTH, ~Ray
<?php // RAY_temp_edvinson.php
error_reporting(E_ALL);
// MANUAL REFERENCE PAGES YOU MUST UNDERSTAND TO UPLOAD FILES
// http://php.net/manual/en/features.file-upload.php
// http://php.net/manual/en/features.file-upload.common-pitfalls.php
// http://php.net/manual/en/function.move-uploaded-file.php
// http://php.net/manual/en/reserved.variables.files.php
// MANUAL PAGES THAT ARE IMPORTANT IF YOU ARE DEALING WITH LARGE FILES
// http://php.net/manual/en/ini.core.php#ini.upload-max-filesize
// http://php.net/manual/en/ini.core.php#ini.post-max-size
// http://php.net/manual/en/info.configuration.php#ini.max-input-time
// PHP 5.1+ SEE http://php.net/manual/en/function.date-default-timezone-set.php
date_default_timezone_set('America/Chicago');
// ESTABLISH THE NAME OF THE 'uploads' DIRECTORY (MUST ALREADY EXIST)
$uploads = 'RAY_junk';
// ESTABLISH THE BIGGEST FILE SIZE WE CAN ACCEPT - ABOUT 8 MB
$max_file_size = '8000000';
// ESTABLISH THE MAXIMUM NUMBER OF FILES WE CAN UPLOAD
$nf = 1;
// ESTABLISH THE KINDS OF FILE EXTENSIONS WE CAN ACCEPT
$file_exts = array
( 'doc'
, 'docx'
)
;
// LIST OF THE ERRORS THAT MAY BE REPORTED IN $_FILES[]["error"] (THERE IS NO #5)
$errors = array
( 0 => "Success!"
, 1 => "The uploaded file exceeds the upload_max_filesize directive in php.ini"
, 2 => "The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form"
, 3 => "The uploaded file was only partially uploaded"
, 4 => "No file was uploaded"
, 5 => "UNDEFINED ERROR"
, 6 => "Missing a temporary folder"
, 7 => "Cannot write file to disk"
)
;
// IF THERE IS NOTHING IN $_POST, PUT UP THE FORM FOR INPUT
if (empty($_POST))
{
?>
<h2>Upload <?php echo $nf; ?> file(s)</h2>
<!--
SOME THINGS TO NOTE ABOUT THIS FORM...
ENCTYPE IN THE HTML <FORM> STATEMENT
MAX_FILE_SIZE MUST PRECEDE THE FILE INPUT FIELD
INPUT NAME= IN TYPE=FILE DETERMINES THE NAME YOU FIND IN $_FILES ARRAY
ABSENCE OF ACTION= ATTRIBUTE IN FORM TAG CAUSES POST TO SAME SCRIPT
-->
<form name="UploadForm" enctype="multipart/form-data" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size; ?>" />
<p>
Find the file(s) you want to upload and click the "Upload" button below.
</p>
<?php // CREATE INPUT STATEMENTS FOR UP TO $n FILE NAMES
for ($n = 0; $n < $nf; $n++)
{
echo "<input name=\"userfile$n\" type=\"file\" size=\"80\" /><br/>\n";
}
?>
<br/>Check this box <input autocomplete="off" type="checkbox" name="overwrite" /> to <strong>overwrite</strong> existing files.
<input type="submit" value="Upload" />
</form>
<?php
die();
}
// END OF THE FORM SCRIPT
// WE HAVE GOT SOMETHING IN $_POST - RUN THE ACTION SCRIPT
else
{
// THERE IS POST DATA - PROCESS IT
echo "<h2>Results: File Upload</h2>\n";
// ACTIVATE THIS TO SEE WHAT IS COMING THROUGH
echo "<pre>"; var_dump($_FILES); var_dump($_POST); echo "</pre>\n";
// ITERATE OVER THE CONTENTS OF $_FILES
foreach ($_FILES as $my_uploaded_file)
{
// SKIP OVER EMPTY SPOTS - NOTHING UPLOADED
$error_code = $my_uploaded_file["error"];
if ($error_code == 4) continue;
// SYNTHESIZE THE NEW FILE NAME
$f_type = trim(strtolower(end (explode( '.', basename($my_uploaded_file['name'] )))));
$f_name = trim(strtolower(current(explode( '.', basename($my_uploaded_file['name'] )))));
$my_new_file
= getcwd()
. DIRECTORY_SEPARATOR
. $uploads
. DIRECTORY_SEPARATOR
. $f_name
. '.'
. $f_type
;
$my_file
= $uploads
. DIRECTORY_SEPARATOR
. $f_name
. '.'
. $f_type;
// OPTIONAL TEST FOR ALLOWABLE EXTENSIONS
if (!in_array($f_type, $file_exts)) die("Sorry, $f_type files not allowed");
// IF THERE ARE ERRORS
if ($error_code != 0)
{
$error_message = $errors[$error_code];
die("Sorry, Upload Error Code: $error_code: $error_message");
}
// GET THE FILE SIZE
$file_size = number_format($my_uploaded_file["size"]);
// IF THE FILE IS NEW (DOES NOT EXIST)
if (!file_exists($my_new_file))
{
// IF THE MOVE FUNCTION WORKED CORRECTLY
if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file))
{
$upload_success = 1;
}
// IF THE MOVE FUNCTION FAILED
else
{
$upload_success = -1;
}
}
// IF THE FILE ALREADY EXISTS
else
{
echo "<br/><b><i>$my_file</i></b> already exists.\n";
// SHOULD WE OVERWRITE THE FILE? IF NOT
if (empty($_POST["overwrite"]))
{
$upload_success = 0;
}
// IF WE SHOULD OVERWRITE THE FILE, TRY TO MAKE A BACKUP
else
{
$now = date('Y-m-d');
$my_bak = $my_new_file . '.' . $now . '.bak';
if (!copy($my_new_file, $my_bak))
{
echo "<br/><strong>Attempted Backup Failed!</strong>\n";
}
if (move_uploaded_file($my_uploaded_file['tmp_name'], $my_new_file))
{
$upload_success = 2;
}
else
{
$upload_success = -1;
}
}
}
// REPORT OUR SUCCESS OR FAILURE
if ($upload_success == 2) { echo "<br/>It has been overwritten.\n"; }
if ($upload_success == 1) { echo "<br/><strong>$my_file</strong> has been saved.\n"; }
if ($upload_success == 0) { echo "<br/><strong>It was NOT overwritten.</strong>\n"; }
if ($upload_success < 0) { echo "<br/><strong>ERROR: $my_file NOT SAVED - SEE WARNING FROM move_uploaded_file() COMMAND</strong>\n"; }
if ($upload_success > 0)
{
echo "$file_size bytes uploaded.\n";
if (!chmod ($my_new_file, 0755))
{
echo "<br/>chmod(0755) FAILED: fileperms() = ";
echo substr(sprintf('%o', fileperms($my_new_file)), -4);
}
echo "<br/><a target=\"_blank\" href=\"$my_file\">See the file $my_file</a>\n";
}
// END FOREACH ITERATOR - EACH ITERATION PROCESSES ONE FILE
}
}
ASKER
Ray, Where do I upload this to please? Does this replace my current page?
The script I posted above is just a teaching example, not a replacement for any application code. Try uploading a Word document from your computer to my server using the URL I posted above. The upload will dump out the contents of $_FILES so you can see what my server sees when you upload a file. In your upload script, you might try using a similar strategy to print out the contents of $_FILES.
The way I determine that a file is a Word document is by looking at the file extension.
You might also consider allowing clients to upload PDF files, too. If they have a resume in PDF form it would probably make sense to accept that. Just a thought... ~Ray
The way I determine that a file is a Word document is by looking at the file extension.
You might also consider allowing clients to upload PDF files, too. If they have a resume in PDF form it would probably make sense to accept that. Just a thought... ~Ray
ASKER
Works good it appears.
Now I need someone to speak to me on how to put that into my page script please.
Now I need someone to speak to me on how to put that into my page script please.
Are you a professional PHP programmer? If not, you might want to have a consultant on retainer for things like this. If you are professionally responsible for the script, please post the PHP script and I will try to suggest where you might put the changes. Thanks, ~Ray
ASKER
I am a Dreamweaver WYSIWYG level and occasionally dig deeper. As you may know if you aren't in it all the time, things get forgotten and technology changes.
So, I keep paying my Experts bill each month so that I can get the answers.
So far, it's been a worthwhile investment.
Thank you for your time!
The page code is above under CodeJobApply.txt
So, I keep paying my Experts bill each month so that I can get the answers.
So far, it's been a worthwhile investment.
Thank you for your time!
The page code is above under CodeJobApply.txt
Got it. Let me look at that script and see if I can figure it out.
Whoa! You have some unrelated scary stuff in there. Check the large red warning box about the ereg() functions.
http://us3.php.net/manual/en/function.ereg.php
I'll look at the other parts now.
http://us3.php.net/manual/en/function.ereg.php
I'll look at the other parts now.
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Bonus, as appreciation for using EE. Try changing your email validation to something like the function shown in this example. It will be a bit more future-proof.
<?php // RAY_email_validation.php
error_reporting(E_ALL);
// A FUNCTION TO TEST FOR A VALID EMAIL ADDRESS, RETURN TRUE OR FALSE
// SEE MAN PAGE: http://php.net/manual/en/intro.filter.php
function check_valid_email($email, $rout=TRUE)
{
// LIST OF BLOCKED DOMAINS
$bogus = array
( '@unknown.com'
, '@example.com'
, '@gooseball.org'
)
;
// IF PHP 5.2 OR ABOVE, WE CAN USE THE FILTER
if (strnatcmp(phpversion(),'5.2') >= 0)
{
if(filter_var($email, FILTER_VALIDATE_EMAIL) === FALSE) return FALSE;
}
// IF LOWER-LEVEL PHP, WE CAN CONSTRUCT A REGULAR EXPRESSION
else
{
$regex
= '/' // START REGEX DELIMITER
. '^' // START STRING
. '[A-Z0-9_-]' // AN EMAIL - SOME CHARACTER(S)
. '[A-Z0-9._-]*' // AN EMAIL - SOME CHARACTER(S) PERMITS DOT
. '@' // A SINGLE AT-SIGN
. '([A-Z0-9][A-Z0-9-]*\.)+' // A DOMAIN NAME PERMITS DOT, ENDS DOT
. '[A-Z\.]' // A TOP-LEVEL DOMAIN PERMITS DOT
. '{2,6}' // TLD LENGTH >= 2 AND =< 6
. '$' // ENDOF STRING
. '/' // ENDOF REGEX DELIMITER
. 'i' // CASE INSENSITIVE
;
// TEST THE STRING FORMAT
if (!preg_match($regex, $email)) return FALSE;
}
// TEST TO SEE IF THE DOMAIN IS IN OUR BLOCKED LIST
foreach ($bogus as $badguy)
{
if (stripos($email, $badguy)) return FALSE;
}
// FILTER_VAR OR PREG_MATCH DOES NOT TEST IF THE DOMAIN IS ROUTABLE
if ($rout)
{
$domain = explode('@', $email);
// MAN PAGE: http://php.net/manual/en/function.checkdnsrr.php
if ( checkdnsrr($domain[1], "MX") || checkdnsrr($domain[1], "A") ) return TRUE;
// EMAIL IS NOT ROUTABLE
return FALSE;
}
return TRUE;
}
// DEMONSTRATE THE FUNCTION IN ACTION
$e = NULL;
if (!empty($_GET["e"]))
{
$e = $_GET["e"];
if (check_valid_email($e))
{
echo "<br/>VALID: $e \n";
}
else
{
echo "<br/>BOGUS: $e \n";
}
}
// END OF PROCESSING - CREATE THE FORM USING HEREDOC NOTATION
$form = <<<ENDFORM
<form>
TEST A STRING FOR A VALID EMAIL ADDRESS:
<input name="e" value="$e" />
<input type="submit" />
</form>
ENDFORM;
echo $form;
Best regards, ~Ray
ASKER
Works Great!!!!! Thank you and thanks for the extra effort. If I could award a thousand or more I would!!
Thanks for the points - I with I could test these things, but sometimes I just get lucky ;-)
All the best, ~Ray
All the best, ~Ray