First look at the instance
The code is as follows: |
Copy code |
<? Php // Determine whether the temporary file storage path contains the file uploaded by the user If (is_uploaded_file ($ _ FILES ["uploadfile"] ["tmp_name"]) { // Store information in variables for higher efficiency $ Upfile = $ _ FILES ["uploadfile"]; // use an array string to store the information of the uploaded file. // Print_r ($ upfile ); // if printed, the output is similar to this information Array ([name] => m.jpg [type] => image/jpeg [tmp_name] => C: WINDOWSTempphp1A. tmp [error] = & gt; 0 [size] = & gt; 44905) $ Name = $ upfile ["name"]; // This parameter can be used to transfer files later. $ Type = $ upfile ["type"]; // file Upload type $ Size = $ upfile ["size"]; // size of the uploaded file $ Tmp_name = $ upfile ["tmp_name"]; // temporary name of the file uploaded by the user $ Error = $ upfile ["error"]; // error message during Upload // Echo $ name; // Determine the file type to determine whether to transfer the file. If yes, set $ OK = 1 to transfer the file. Switch ($ type ){ Case "image/jpg": $ OK = 1; Break; Case "image/jpeg": $ OK = 1; Break; Case "image/gif": $ OK = 1; Break; Default: $ OK = 0; Break; } // If the file meets the requirements and there is no error during the upload process If ($ OK & $ error = '0 '){ // Call the move_uploaded_file () function for file transfer Move_uploaded_file ($ tmp_name, 'up/'. $ name ); // After the operation is successful, a message is displayed, indicating that the operation is successful. Echo "<script language =" javascript "> alert ('sudoed') </script> "; } Else { // If the file does not match the type or the upload process has an error, the system prompts "failed". Echo "<script language =" javascript "> alert ('failed') </script> "; } } ?> <! -- Set the file submission form --> <Form enctype = "multipart/form-data" method = "post" name = "uploadform"> <Input type = "file" name = "uploadfile" value = "Upload File"> <Input type = "submit" name = "submit" value = "Upload"> </Form> |
The above code can work completely, but it is a lot of loopholes in the actual application, let's gradually improve first, the uploaded file must have a fixed directory to save, here we use a $ UploadPath variable to save it, for example, $ UploadPath = "/home/flier/upload /";
Or more complex automatic positioning, such
The code is as follows: |
Copy code |
$ UploadPath = AddSlashes (dirname ($ PATH_TRANSLATED). "\ upload \";
|
$ PATH_TRANSLATED is the current transfer directory.
Assume that the uploaded file is saved in a subdirectory named upload. The dirname function returns the directory name, adds the subdirectory name, and saves the complete uploaded file name and path with the variable $ FileName.
$ FileName = $ UploadPath. $ UploadFile_name;
Secondly, we also want users to learn brief information about the uploaded file, such as the size of the uploaded file if ($ UploadFile_size <1024) {// The size of the uploaded file
The code is as follows: |
Copy code |
$ FileSize = (string) $ UploadFile_size. "byte "; } Elseif ($ UploadFile_size <(1024*1024 )){ $ FileSize = number_format (double) ($ UploadFile_size/1024), 1). "KB "; } Else { $ FileSize = number_format (double) ($ UploadFile_size/(1024*1024), 1). "MB "; } |
The number_format function is used to format the output. For detailed usage, see the manual. Next, we must take into account the existence of the file and the copy operation failure, and provide the corresponding prompt information if (! File_exists ($ FileName )){
The code is as follows: |
Copy code |
If (copy ($ UploadFile, $ FileName )){ Echo "file $ UploadFile_name ($ FileSize) uploaded successfully! "; } Else { Echo "file $ UploadFile_name Upload failed! "; } Unlink ($ UploadFile ); } Else { Echo "file $ UploadFile_name already exists! "; } |
Then we should take into account that the upload of large files is prone to timeout, you can use set_time_limit ($ TimeLimit); increase the timeout limit.
Finally, the section and implementation code are integrated into a separate file. To achieve this idea, we add an implicit VALUE <input type = "hidden" NAME = "UploadAction" VALUE = "1"> in form to indicate the current status (interface or implementation), so that we can treat it differently.
The following program can be used for instance applications
The code is as follows: |
Copy code |
Function FileUpload ($ resourceType, $ currentFolder, $ sCommand) { If (! Isset ($ _ FILES )){ Global $ _ FILES; } $ SErrorNumber = '0 '; $ SFileName = ''; If (isset ($ _ FILES ['newfile']) &! Is_null ($ _ FILES ['newfile'] ['tmp _ name']) { Global $ Config; $ OFile = $ _ FILES ['newfile']; // Map the virtual path to the local server path. $ SServerDir = ServerMapFolder ($ resourceType, $ currentFolder, $ sCommand ); // Get the uploaded file name. $ SFileName = $ oFile ['name']; $ SFileName = SanitizeFileName ($ sFileName ); $ SOriginalFileName = $ sFileName; // Get the extension. $ SExtension = substr ($ sFileName, (strrpos ($ sFileName, '.') + 1 )); $ SExtension = strtolower ($ sExtension ); If (isset ($ Config ['secureimageupload']) { If ($ isImageValid = IsImageValid ($ oFile ['tmp _ name'], $ sExtension) === false) { $ SErrorNumber = '123 '; } } If (isset ($ Config ['htmlextension']) { If (! IsHtmlExtension ($ sExtension, $ Config ['htmlextension']) & ($ DetectHtml = DetectHtml ($ oFile ['tmp _ name']) = true) { $ SErrorNumber = '123 '; } } // Check if it is an allowed extension. If (! $ SErrorNumber & IsAllowedExt ($ sExtension, $ resourceType )) { $ ICounter = 0; While (true) { $ SFilePath = $ sServerDir. $ sFileName; If (is_file ($ sFilePath )) { $ ICounter ++; $ SFileName = RemoveExtension ($ sOriginalFileName). '('. $ iCounter. ').'. $ sExtension; $ SErrorNumber = '123 '; } Else { Move_uploaded_file ($ oFile ['tmp _ name'], $ sFilePath ); If (is_file ($ sFilePath )) { If (isset ($ Config ['chmodonupload']) &! $ Config ['chdonupload']) { Break; } $ Permissions = 0777; If (isset ($ Config ['chmodonupload']) & $ Config ['chmodonupload']) { $ Permissions = $ Config ['chmodonupload']; } $ Oldumask = umask (0 ); Chmod ($ sFilePath, $ permissions ); Umask ($ oldumask ); } Break; } } If (file_exists ($ sFilePath )) { // Previous checks failed, try once again If (isset ($ isImageValid) & $ isImageValid ===- 1 & IsImageValid ($ sFilePath, $ sExtension) === false) { @ Unlink ($ sFilePath ); $ SErrorNumber = '123 '; } Else if (isset ($ detectHtml) & $ detectHtml ===- 1 & DetectHtml ($ sFilePath) === true) { @ Unlink ($ sFilePath ); $ SErrorNumber = '123 '; } } } Else $ SErrorNumber = '123 '; } Else $ SErrorNumber = '123 '; $ SFileUrl = CombinePaths (GetResourceTypePath ($ resourceType, $ sCommand), $ currentFolder ); $ SFileUrl = CombinePaths ($ sFileUrl, $ sFileName );
SendUploadResults ($ sErrorNumber, $ sFileUrl, $ sFileName ); Exit; |