Guest Posted November 4, 2009 Share Posted November 4, 2009 Hi there, I have a question about the upload of large files, like videos (files generally above 20Mo). Is it better to use the FTP functions of php or the normal upload fonctions using additional features, like: - php_value upload_max_filesize 40M - php_value post_max_size 40M - php_value max_execution_time 400 - php_value max_input_time 400 Thanks in advance for your input... Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/ Share on other sites More sharing options...
dreamwest Posted November 4, 2009 Share Posted November 4, 2009 ini_set('memory_limit','200 M'); Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-950840 Share on other sites More sharing options...
Guest Posted November 4, 2009 Share Posted November 4, 2009 ini_set('memory_limit','200 M'); So I should apply this line of code in my upload file instead of the other lines above in a .htaccess file? Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-950842 Share on other sites More sharing options...
dreamwest Posted November 4, 2009 Share Posted November 4, 2009 yes. Just add it to the top of the upload script 200 M is how many MB you want to allow Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-950847 Share on other sites More sharing options...
Guest Posted November 4, 2009 Share Posted November 4, 2009 It does not seem to work... Or it is in my code that there is a problem... I've put this before the header <?php ini_set('memory_limit','30 M'); ?> And this is my form: <form action="edit_showreel.php?actor=<?php echo $sel_actor['id'];?>¤tpage=<?php echo $currentpage;?>" method="post" enctype="multipart/form-data"> <label for="uploadedfile">Filename:</label> <input type="file" name="uploadedfile" id="uploadedfile" /> <input type="submit" name="submit1" value="Submit" /> </form> <?php if (isset($_POST['submit1'])) { echo "<br/>Please wait while we attempt to upload your file...<br><br>"; $target_path = "files/showreel/"; $flag = 0; // Safety net, if this gets to 1 at any point in the process, we don't upload. $filename = $_FILES['uploadedfile']['name']; $filesize = $_FILES['uploadedfile']['size']; $mimetype = $_FILES['uploadedfile']['type']; $filesize2 = substr($_FILES['uploadedfile']['size'] / 1000000, 0, 4); $filename = htmlentities($filename); $filesize = htmlentities($filesize); $mimetype = htmlentities($mimetype); $target_path = $target_path . basename( $filename ); if ($filename != "") { echo "Beginning upload process for file named: ".$filename."<br>"; echo "Filesize: ".$filesize2." Mo<br>"; echo "Type: ".$mimetype."<br><br>"; } //First generate a MD5 hash of what the new file name will be //Force a MP3 extention on the file we are uploading $hashedfilename = md5($filename); $hashedfilename = $hashedfilename.".flv"; //Check for empty file if ($filename == "") { $error = "No File Exists!"; $flag = $flag + 1; } //Whitelisted files - Only allow files with MP3 extention onto server... $whitelist = array(".flv"); foreach ($whitelist as $ending) { if(substr($filename, -(strlen($ending))) != $ending) { $error = "The file type or extention you are trying to upload is not allowed! You can only upload MP3 files to the server!"; $flag++; } } if ($filesize > 25000000) { //File is too large if($flag == 0){ $error = "The file you are trying to upload is too large! Your file can be up to 25 MB in size only. Please upload a smaller FLV file or encode your file with a lower bitrate."; } $flag = $flag + 1; } if ($filesize < 5000000) { //File is too small if($flag == 0){ $error = "The file you are trying to upload is too small! Your file has been marked as suspicious because our system has determined that it is too small to be a valid FLV file. Valid FLV files must be bigger than 5 MB and smaller than 25 MB."; } $flag = $flag + 1; } //Check the mimetype of the file if ($mimetype != 'video/x-flv') { if($flag == 0){ $error = "The file you are trying to upload does not contain expected data. Are you sure that the file is an MP3?"; } $flag = $flag + 1; } //All checks are done, actually move the file... if ($flag == 0) { //Now we check that the file doesn't already exist. $existname = "files/showreel/".$hashedfilename; if (file_exists($existname)) { unlink($existname); move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path); rename("files/showreel/".$filename, "files/showreel/".$hashedfilename); echo "The file ". basename( $filename ). " has been uploaded. You can <a href=\"edit_actor_media.php?actor=$sel_actor[id]¤tpage=$currentpage\">go back to his profile</a><br/>"; $id = mysql_prep($_GET['actor']); $query = "UPDATE actors SET show_reel = '{$hashedfilename}' WHERE id = {$id}"; $result = mysql_query($query, $connection); } else { if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) { //Change the filename to MD5 hash and FORCE a MP3 extention. if (@file_exists("files/showreel/".$filename)) { //Rename the file to an MD5 version rename("files/showreel/".$filename, "files/showreel/".$hashedfilename); echo "The file ". basename( $filename ). " has been uploaded. You can <a href=\"edit_actor_media.php?actor=$sel_actor[id]¤tpage=$currentpage\">go back to his profile</a><br/>"; $id = mysql_prep($_GET['actor']); $query = "UPDATE actors SET show_reel = '{$hashedfilename}' WHERE id = {$id}"; $result = mysql_query($query, $connection); } else { echo "There was an error uploading the file, please try again!"; } } else { echo "There was an error uploading the file, please try again!"; } } } else { echo "File Upload Failed!<br>"; if ($error != "") { echo $error; } } } ?> Any suggestion/idea? Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951122 Share on other sites More sharing options...
dreamwest Posted November 4, 2009 Share Posted November 4, 2009 You can raise this amount to 50M because your still checking the upload size with $_FILES["uploadedfile"]["size"] ini_set('memory_limit','50 M'); Also what errors do you get, do you get this echo: The file you are trying to upload is too large! Your file can be up to 25 MB in size only. Please upload a smaller FLV file or encode your file with a lower bitrate You can add this : if($_FILES["uploadedfile"]["size"] > (25* 1024)){ echo 'Too Large!' die(); } Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951278 Share on other sites More sharing options...
simshaun Posted November 4, 2009 Share Posted November 4, 2009 AFAIK, the memory_limit is really only a concern if you are trying to resize a photo on upload. You need to up your upload_max_filesize, post_max_size, and max_execution_time to handle larger uploads. You can not change any of those with ini_set, so you must do it with either htaccess or your Apache config. I prefer htaccess. Regardless of whether you use PHP's FTP functions or its normal upload features, either way the user is uploading a file through a web form and the limits still apply. Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951289 Share on other sites More sharing options...
Guest Posted November 5, 2009 Share Posted November 5, 2009 Also what errors do you get, do you get this echo: The file you are trying to upload is too large! Your file can be up to 25 MB in size only. Please upload a smaller FLV file or encode your file with a lower bitrate Nope, I did not get that error message. I did not get anything. It's like the page is refreshing itself and nothing happens. No error message saying that it did not work, or it did work. And the file is not moved to where it should be moved so it definitelly does not work... I made this script work for pdf and mp3 files, but can't make it work for flv files. I guess that's an issue of size of the file... I tried to put the "ini_set('memory_limit','50 M');" at the top of the page, as well as this in a .htaccess file: - php_value upload_max_filesize 40M - php_value post_max_size 40M - php_value max_execution_time 400 - php_value max_input_time 400 But it still does not work... Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951611 Share on other sites More sharing options...
simshaun Posted November 5, 2009 Share Posted November 5, 2009 How large is the flash file? Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951775 Share on other sites More sharing options...
Guest Posted November 5, 2009 Share Posted November 5, 2009 Generally between 20 et 30Mo. Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951782 Share on other sites More sharing options...
simshaun Posted November 5, 2009 Share Posted November 5, 2009 1. Is it taking longer than 6 minutes to upload? 2. Run phpinfo() at the top of the file and ensure your htaccess setting changes are being picked up. 3. It is possible that Apache's limit defined in the config is being reached. See the limitRequestBody setting. Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951791 Share on other sites More sharing options...
Guest Posted November 5, 2009 Share Posted November 5, 2009 1. Is it taking longer than 6 minutes to upload? 2. Run phpinfo() at the top of the file and ensure your htaccess setting changes are being picked up. 3. It is possible that Apache's limit defined in the config is being reached. See the limitRequestBody setting. 1. I don't know how long it is going to take as it will depend on the user's connection I guess. 2. As for the phpinfo, where in the phpinfo do you see that the .htaccess setting changes are being picked up or not? Thanks for your reply... Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951797 Share on other sites More sharing options...
simshaun Posted November 5, 2009 Share Posted November 5, 2009 Just run phpinfo() and look for - upload_max_filesize - post_max_size - max_execution_time - max_input_time Make sure they have the correct values. Also, I'm not sure what your target audience's connection speeds are, but a 20-30mb file may take longer than 6 minutes to upload. Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951802 Share on other sites More sharing options...
Guest Posted November 5, 2009 Share Posted November 5, 2009 It seems that they don't have the correct values... As for the target audience, the files are going to be uploaded by a couple of persons in charge of the website, both having a good internet connection. Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951822 Share on other sites More sharing options...
simshaun Posted November 5, 2009 Share Posted November 5, 2009 Finally, we're getting somewhere. Is your htaccess in the site's root directory? If not, try placing it there and check the values with phpinfo() again. If that still does not work, then your host may not be allowing you to change php config values via htaccess. If this is the case, you'll have to have your host edit the php.ini file (unless you are able to). Edit: Another thing I just thought of, although I dont think its an issue. In your htaccess file, try surrounding your string values with double quotes, like this: php_value max_execution_time 620 php_value max_input_time 600 php_value post_max_size "42M" php_value upload_max_filesize "40M" Quote Link to comment https://forums.phpfreaks.com/topic/180249-question-about-the-upload-of-large-files/#findComment-951824 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.