Tag: computer

PHP Upload Multiple Files From URL

In a previous post I made I showed you how to upload a file from a URL using a PHP script. You can view this post here.

Now I will show you how to take this a step further and upload multiple files from multiple URLs or uploaded from the user’s computer.

Because we will have multiple files to upload we are going to want to make an array of these files that include all their attributes. Then we’ll process each file at a time and based on whether it is coming from a URL or the user’s hard drive, we will upload it accordingly.

Here is a preview of what our form will look like:

Here is our HTML for this form on index.php:

<form action="./index.php?do=upload" method="post" enctype="multipart/form-data" name="upload_files_form">
<div id="upload_files">
<div id="upload_file_1">
<div>
<button id="1_computer_button" name="upload_type_computer" type="button" onclick="hideElement('1_upload_url'); showElement('1_upload_computer')">Upload From Computer</button>
<button id="1_url_button" name="upload_type_url" type="button" onclick="hideElement('1_upload_computer'); showElement('1_upload_url')">Upload From URL</button>
</div>
<div>
<div id="1_upload_computer">
<input type="file" name="files_hdd[]" size="30" />
</div>
<div id="1_upload_url" style="display:none">
<input type="text" name="files_url[]" size="30" maxlength="100" value="http://" onfocus="if(this.value == 'http://') this.value = '';" id="1_input_url" />
</div>
</div>
</div>
<div id="upload_file_2">
<div>
<button id="2_computer_button" name="upload_type_computer" type="button" onclick="hideElement('2_upload_url'); showElement('2_upload_computer')">Upload From Computer</button>
<button id="2_url_button" name="upload_type_url" type="button" onclick="hideElement('2_upload_computer'); showElement('2_upload_url')">Upload From URL</button>
</div>
<div>
<div id="2_upload_computer">
<input type="file" name="files_hdd[]" size="30" />
</div>
<div id="2_upload_url" style="display:none">
<input type="text" name="files_url[]" size="30" maxlength="100" value="http://" onfocus="if(this.value == 'http://') this.value = '';" id="2_input_url" />
</div>
</div>
</div>
<div id="upload_file_3">
<div>
<button id="3_computer_button" name="upload_type_computer" type="button" onclick="hideElement('3_upload_url'); showElement('3_upload_computer')">Upload From Computer</button>
<button id="3_url_button" name="upload_type_url" type="button" onclick="hideElement('3_upload_computer'); showElement('3_upload_url')">Upload From URL</button>
</div>
<div>
<div id="3_upload_computer">
<input type="file" name="files_hdd[]" size="30" />
</div>
<div id="3_upload_url" style="display:none">
<input type="text" name="files_url[]" size="30" maxlength="100" value="http://" onfocus="if(this.value == 'http://') this.value = '';" id="3_input_url" />
</div>
</div>
</div>
</div>
<input type="submit" name="submit" value="Upload Files Now" onclick="showUploadDiv()" />  <input type="reset" name="reset" value="Reset Fields" />
<p> </p>
<div id="uploading" style="display:none">
</div>
</form>

This form contains three file inputs, either uploaded from the user’s computer, or given by a URL to a file. There are two buttons for each input which enable and disable the HDD or URL upload options. Now, I haven’t made the script to completely disable the URL input once a file has been selected from the user’s computer, so when the form is submitted it will check for uploaded files first over files being gathered from a URL. So you will want to include that on your main page so users know you can only upload three files at a time here, not six.

The form includes the animated loading gif feature which I posted here:
https://bgallz.dev/1140/how-to-make-animated-loading-gif/

You’ll notice on the submit button it activates the Javascript function “showUploadDiv().” This function changes the display style setting on the uploading div and then fills it with some text and the animated loading image.

I also have used some jQuery for the buttons to be used effectively:

<script src="jquery-1.7.2.min.js" type="text/javascript"></script>
<script type="text/javascript">
$(document).ready(function(){
var clickedClass = "selected";
var buttons = "#upload_files button";
$(buttons).click(function() {
$(this).addClass(clickedClass).siblings().removeClass(clickedClass);
});
});
</script>

What this jQuery says is to add the class “selected” – from clickedClass – to the current button that is being clicked, and remove that class name from all other buttons within the current parent’s sibilings. Sounds a little complicated, but it’s very simple. The buttons are loaded from “#upload_files button” – so thats all the button elements within the div ID “upload_files.”

Now finally for the PHP of the script. On index.php we include the following in the header:

$valid_exts = array(
"gif","png","jpeg","jpg",
"image/gif","image/jpeg","image/png","image/jpg"
); // array of valid file extensions
$max_file_size = 32; // file size in kb
$upload_dir = "files/"; // directory to upload to with trailing slash

$upload_result = "";

if(isset($_GET['do']) && $_GET['do'] == "upload"){
$upload_result = run_upload_form();
}

So when the form is submitted – which is sent to “index.php?do=upload” – we run the function run_upload_form() and set the $upload_result to its returned value.

The key variables defined at the beginning of the script are there for you to modify as you need them. Of course you can modify the function itself to output different values as you need them to be. Currently the script checks against the following before uploading:

  • Valid extension type (image files by default)
  • File size limit (32KB by default)
  • Upload directory exists and is writable
  • URL validation for remote file size and type

To view the rest of the PHP as well as the Javascript and CSS styles you must download the script.

Download the script free here.

Use the demo here.

Multiple File Upload with HTML5

A new feature of HTML 5 is the ability to use a multiple file upload field. This is extremely simple with HTML 5. You basically create an input tag with type = file and the multiple attribute applied.

Here is an example:

<form action="upload.php" method="post" enctype="multipart/form-data">
Upload Files: <input type="file" name="upload_files[]" multiple="multiple" />
<input type="submit" value="Submit" name="submit" />
</form>

This will create the following:

This may look like a regular file upload input from standard HTML however when you click the “Browse…” button to look for files on your computer, you can select multiple files by Shift+Clicking on the desired files grouped together, or alternatively Ctrl+Clicking to select individual scattered files. This only works for files coming from your computer of course, so to upload multiple files from URL, you will need a script like the one above.

Here is a screenshot of the browse window. You can select multiple files as you can see they are highlighted, and listed in order in the “File name:” input.

Browse for multiple files using HTML 5
Browse for multiple files using HTML 5

For this multiple file upload, the PHP is much simpler. We simply run the upload like we would for the first example, only we don’t have to worry about URL files or checking an array of files. The HTML already loads the files into an array for us when PHP checks the $_FILES[‘upload_files’].

Here is how it looks…

<?php
// upload multiple files from HTML5 multiple files input

if(isset($_POST['submit']))
{
$valid_exts = array("image/gif","image/jpeg","image/png","image/jpg"); // image files
$max_size = 20480; // max size in kb (2kb default)
$directory = "./files/"; // upload directory

$upload_files = $_FILES['upload_files'];
$files_uploaded = array(); // successful uploads

if(is_array($upload_files))
{

foreach($upload_files as $file)
{

if(in_array($file["type"],$valid_exts))
{

if($file["size"] <= $max_size)
{

// file is valid type and size, let's upload
if(move_uploaded_file($file["tmp_name"],$directory . $file["name"]))
{

$files_uploaded[] = '<a href="'.$directory.$file["name"].'" target="_blank">'.$file["name"].'</a>';

}

} else { return "File size too large. Max file size is: ". ($max_size / 1024) . " KB."; }

} else { return "Only image file types may be uploaded."; }

}

return "". count($files_uploaded) ." files out of ". count($upload_files) ." total have successfully been uploaded. Here are the uploaded files: <br/><br/>" . print_r($files_uploaded) . "";

} else { return "Please a file or multiple files to upload."; }

}
?>

Enjoy!

Filed under: CSS, Featured, Javascript, PHP, Scripts, Web ProgrammingTagged with: , , , , , , , , , , , , ,

Building a Battlefield 3 PC

How to Build a Battlefield 3 PC
Build Your Battlefield 3 PC Cheap and Right!

Battlefield 3 will hit the shelves October 25th, 2011 for the PC, Xbox 360, and Playstation 3. If you are a PC gamer you know you are going to want a powerful machine to experience this much anticipated release. Battlefield 3 introduces the Frostbite 2.0 engine which is based on the 1.5 engine seen in Bad Company 2, so the system requirements will be similar.

Minimum System Requirements:

OS: Windows Vista or Windows 7
Processor: Core 2 Duo @ 2.0GHz
RAM: 2GB
Graphic card: DirectX 10 or 11 compatible Nvidia or AMD ATI card.
Graphics card memory: 512 MB
Hard drive: 15 GB for disc version or 10 GB for digital version

Recommended System Requirements:

OS: Windows 7 64-bit
Processor: Quad-core Intel or AMD CPU
RAM: 4GB
Graphics card: DirectX 11 Nvidia or AMD ATI card, GeForce GTX 460, Radeon Radeon HD 6850
Graphics card memory: 1 GB
Hard drive: 15 GB for disc version or 10 GB for digital version

My Battlefield 3 Gaming Machine

CPU / Processor:
AMD Phenom II X6 1090T Black Edition Thuban 3.2GHz
http://www.newegg.com/Product/Produc…82E16819103849

Motherboard:
GIGABYTE GA-990XA-UD3 AM3+ AMD 990X
http://www.newegg.com/Product/Produc…82E16813128510

Video Card:
SAPPHIRE 100315L Radeon HD 6850 1GB 256-bit GDDR5
http://www.newegg.com/Product/Produc…82E16814102908

with 8GB 1333 DDR3 memory and my current power supply / case which will fit the new components well.

Take the build found here in this article:
http://pc.mmgn.com/Articles/Building-A-PC-For-Battlefield-3

This build budget is $1000.

With the 3 components I have above I am at $445 with a promotional code (HARDOCPX817E) on the processor. This promotion ends TODAY – 8/23/11.

If I added on a Power Supply, HDD, CPU cooler, Case, DVD Drive, and memory:

OCZ ModXStream Pro 700W$59.99 (After rebate) + Free Shipping
Western Digital WD5000AAKS 500GB$49.99 + Free Shipping
ZALMAN CNPS10X Performa 120mm$40.24
– Free Shipping
Rosewill CHALLENGER Black Gaming ATX Mid Tower Computer Case – $49.99 + $9.99 Shipping
Sony Optiarc CD/DVD Burner Drive$19.99 + Free Shipping
G.SKILL Ripjaws Series 8GB (2 x 4GB)$49.99 + Free Shipping

Total: $749 (Plus Tax)
Saved: $250!

Now whether you are looking to put together a new computer all together or just upgrade some components, this may be helpful to you.

1. Establish your price range – Sounds simple, but careful – you may find yourself stretching your boundaries reaching for some luxurious hardware.

2. Look for the deals – Always look for specials online for websites like Newegg.com and TigerDirect.com.

Promotional codes and coupons can be found online  as well from places like RetailMeNot.com or Google. It pays to be patient as well for some upcoming deals for PC components. Check combo deals as well online for Motherboards/CPU’s or GPU/CPU’s.

3. Check compatibility –  It is very important when picking out computer parts to make sure they are compatible with everything else you are getting or with what you are keeping in your system.

With Processors (CPU’s) you want to make sure your motherboard and CPU are both either Intel or AMD. For example my processor is “AMD Phenom II X6 1090T Black Edition” and my motherboard is “GIGABYTE GA-990XA-UD3 AM3+ AMD 990X.” Both are AMD. You also want to make sure that the motherboard accepts the CPU socket type of your processor. My CPU socket type is “Socket AM3” and if you look under details on my motherboard it says “CPU Socket Type: AM3+.” Your power supply must also have the power inputs that match your motherboard’s CPU power input. My motherboard has a 8 pin spot for the CPU and my power supply has that input.

You also want to make sure your motherboard is compatible with both the video card and memory you have. Most motherboards have multiple “PCI Express 2.0 x16” inputs. You will need at least one for your video card and more than one if you plan on having other components that will use these inputs (sound card, 2nd video card, etc.) The video card must also have the same “Chipset Manufacturer” as the motherboard/CPU brand (Intel or AMD). You should also check if features that are available from your video card are possible through your motherboard, such as SLI and CrossfireX. If you are getting a video card for any games (Battlefield 3) make sure it is DirectX11 under 3D API DirectX.

Most memory online and in stores now is DDR3. If you are upgrading your motherboard you will need to make sure the memory you will have is a compatible speed and type.  If you look at “Memory Standard” under details for my motherboard it says “DDR3 2000(O.C.)/1866/1600/1333/1066.” So it is DDR3 and runs at those speeds – 2000 is “Over Clocked.” My memory is 8GB DDR3 1600MHz so it is compatible.

Here is my motherboard layout:

Enjoy building your new PC! Post your builds here or at BFGamerz!

Filed under: Featured, Gaming, TutorialsTagged with: , , , , , , , , , , , ,