Question

PHP GD image upload failing

Asked by: JackHodson

Dear all,

I have a script written for me by a member here some while ago.
I am using it on a new website and when I try to upload a large photo it is failing and comes back blank - it does not say the upload failed, simply it comes back blank (the header and footer of the website comes back but anything within the PHP does not.

For small photos it works well and uploads it to the folder.

I have tried increasing the following using a .htaccess file:
memory_limit to 100MB
post_max_size to 100MB
upload_max_filesize to 100Mb

still it did not work. the defaults are now set again and they are:
memory_limit to 24MB
post_max_size to 8MB
upload_max_filesize to 10Mb.

The code is pasted below and the php settings are here:
http://arockes.org.uk/images/user_photo_uploads/php_info.php

The uploader web page is here: http://arockes.org.uk/photo_uploader.php

PHP is something that does not make a huge amount of sense to me so if you could shed any light on this I would really appreciate it.

Kind regards,
Jack

<br />
    <?
     if($_SERVER['REQUEST_METHOD']!='POST') {
?>
  </p>
  <p>  </p>
  <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="Photo Uploader" id="Photo Uploader">
  <table width="375" style="background-color: #FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
    <tr>
      <td width="365" style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Upload your car or event photos here:</td>
    </tr>
    <tr>
      <td style="text-align:left"><input name="file" type="file" size="35" /></td>
    </tr>
    <tr>
      <td style="text-align:center"><input type="submit" name="Submit" value=":.Send.:" /></td>
    </tr>
  </table>
</form>
<?
} else {
     $message = "";
     $validExtensions[] = "jpg";
     $validExtensions[] = "jpeg";
      $validExtensions[] = "gif";
      $validExtensions[] = "png";
     $sentFileSize = ceil($_FILES['file']['size']/1024);
      # this way is more accurate for the extension
     $sentFileExtension = explode(".", $_FILES['file']['name']);
      $number = count($sentFileExtension);
      $sentFileExtension = strtolower($sentFileExtension[$number-1]);
 
      if(!in_array($sentFileExtension, $validExtensions)) {
           $message = "<span style=\"color:black; font size:11px\"><br>Your photo has <span style=\"color:red\">NOT</span> been uploaded,";
           $message .= " because of an invalid file type. <br>We only accept .JPG, .GIF and .PNG files.</span>";
      } else {
           // SAVE THE FILE
           $uploaddir = 'images/user_photo_uploads/';
           if (file_exists('images/photo_uploader_count.txt')) {
                $handle = fopen('images/photo_uploader_count.txt','r+');
                $newFileNumber = fread($handle,filesize('images/photo_uploader_count.txt'))+1;
                fclose($handle);
                $handle = fopen('images/photo_uploader_count.txt','w');
                fwrite($handle,$newFileNumber.'');
                fclose($handle);
           } else {
                $handle = fopen('images/photo_uploader_count.txt','x');
                fwrite($handle,'1');
                $newFileNumber = 1;
           }
           $uploadfile = $uploaddir . basename($newFileNumber . "." . $sentFileExtension);
 
 
                $bron = $_FILES['file']['tmp_name'];
                $maxbreedte = 1024;
                }
 
                if(!empty($bron)){
                     $dimensies = getimagesize($bron);
                     $breedte = $dimensies[0];
                     $hoogte = $dimensies[1];
                     if($breedte > $maxbreedte){
                          $nieuwebreedte = $maxbreedte;
                          $deelfactor = $breedte / $maxbreedte;
                          $nieuwehoogte = $hoogte / $deelfactor;
 
                          switch ($dimensies['mime']) {
 
                          case 'image/jpeg':
 
                               $image = imagecreatefromjpeg($bron);
                               $destination = imagecreatetruecolor($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagejpeg($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/gif':
 
                               $image = imagecreatefromgif($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagegif($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/png':
 
                               $image = imagecreatefrompng($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagepng($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
                          }
                     } else {
                          $uploadfile = $uploaddir . basename($newFileNumber. "." .$sentFileExtension);
                             if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
                               chmod($uploadfile, 0644);
                               $message = "Your photo has been saved successfully, to upload another, click Back and repeat.<br>";
                         
                          } else {
                               $message = "There was an error uploading the file, please try again!";
                          }
                     }
                }
           if (is_file($uploadfile)) {
                $message = "<span style=\"color:black; font size:11px\"><br>Your photo has been saved successfully, to upload<br>another, click your browsers back button and repeat.<br>";
 
           } else {
                $message .= "<span style=\"color:black; font size:11px\"><br><br>Please click your browsers back button to try again.";
           }
?>
<br /><table width="500" style="background-color:#FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Photo upload result:</td>
  </tr>
  <tr>
    <td style="text-align:center"><? echo $message ?></td>
  </tr>
</table>
<?
}
?>

                                  
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:

Select allOpen in new window

This Question has been solved and asker verified All Experts Exchange premium technology solutions are available to subscription members.

Subscribe now for full access to Experts Exchange and get

Instant Access to this Solution

  • Plus...
  • 30 Day FREE access, no risk, no obligation
  • Collaborate with the world's top tech experts
  • Unlimited access to our exclusive solution database
  • Never be left without tech help again

Subscribe Now

Asked On
2009-07-03 at 04:48:33ID24542132
Topics

PHP for Windows

,

PHP Scripting Language

,

PHP Installation

Participating Experts
2
Points
500
Comments
50

Trusted by hundreds of thousands everyday for fast, accurate and reliable tech support.

  • "The time we save is the biggest benefit of Experts Exchange to Warner Bros. What could take multiple guys 2 hours or more each to find is accessed in around 15 minutes on Experts Exchange." Mike Kapnisakis, Warner Bros.
  • "Our team likes having a resource that is more secure than just using Google and most experts using this service really know their stuff. It's nice to look here first versus using Google." Dayna Sellner, Lockheed Martin
  • "Anytime that I've been stumped with a problem, 9 out of 10 times Experts Exchange has either the accepted solution or an open discussion of the potential solution to the problem." Kenny Red, eBay Inc.

See what Experts Exchange can do for you.

Got a question?

We've got the answer.

Experts Exchange has been collecting answers to technology questions since 1996…3 million and counting! If you have a question, chances are we already have your answer.

Screenshot of Experts Exchange Knowledgebase

Need individual assistance?

Our experts are ready to help.

If you can't find the exact answer you're looking for, ask our exclusive community of 50,000 experts. You’ll get a personalized answer from a trusted professional.

Screenshot of Experts Exchange Knowledgebase

Want to learn from the best?

Read articles from industry experts.

Thousands of free tech tips, tricks, how-to’s and tutorials are available in our peer reviewed articles section. See for yourself how smart our experts are, no login required.

Screenshot of an Article

Working on a long term project?

Store your work and research.

Save solutions to your questions, answers you’ve discovered through searching plus helpful articles in your personal knowledgebase for easy future access.

Screenshot of Experts Exchange Knowledgebase

Access the answers to your technology questions today.

Subscribe Now

30-day free trial. Register in 60 seconds.

What Makes Experts Exchange Unique?

Members of the expert community talk about why the experience at Experts Exchange is different than what you will find anywhere else.

Trusted by the world's most respected brands.

image of each brand's logo

Faithfully serving IT professionals since 1996.

Experts Exchange Logo

Try it out and discover for yourself.

Subscribe Now

30-day free trial. Register in 60 seconds.

Related Solutions

  1. Compiling GD with PHP
    I grabbed the latest GD source and compiled it using make; make install; then I reconfigured PHP using this line ./configure --with-mysql=/usr/local/mysql --with-config-file-path=/www/conf --with-apache=../httpd -enable-track-vars --with-gd=/path/to/gd followed by a make;...
  2. Problem with GD in PHP
    On gd library's website, it says that it comes with php 4.3.0. On my machine, I have php 4.3.9 but I can't find gd library. I checked phpinfo(), and gd library was not listed there. But it shows that gd library is one of the extensions that are available as external modules....
  3. gd library in PHP
    Hello group, Currently, I'm learning PHP but meantime in a project I need to do some image processing which I believe requires a library called as gd. I will appreciate it if somebody could advise me on a book or online resource with example that I could learn how to use gd ...

Free Tech Articles

  1. WARNING: 5 Reasons why you should NEVER fix a computer for free.
    It is in our nature to love the puzzle. We are obsessed. The lot of us. We love puzzles. We love the challenge. We thrive on finding the answer. We hate disarray. It bothers us deep in our soul. W...
  2. SCCM OSD Basic troubleshooting
    SCCM 2007 OSD is a fantastic way to deploy operating systems, however, like most things SCCM issues can sometimes be difficult to resolve due to the sheer volume of logs to sift through and the dispe...
  3. Migrate Small Business Server 2003 to Exchange 2010 and Windows 2008 R2
    This guide is intended to provide step by step instructions on how to migrate from Small Business Server 2003 to Windows 2008 R2 with Exchange 2010. For this migration to work you will need the fo...
  4. Create a Win7 Gadget
    This article shows you how to create a simple "Gadget" -- a sort of mini-application supported by Windows 7 and Vista. Gadgets can be dropped anywhere on the desktop to provide instant information, ...
  5. Outlook continually prompting for username and password
    There have been a lot of questions recently regarding Outlook prompting for a username and password whilst using Exchange 2007. There are a few reasons why this would happen and I will try to cover t...
  6. Backup Exchange 2010 Information Store using Windows Backup
    There seems to be quite a lot of confusion around the ability to backup Exchange 2010 using the built in Windows Backup feature. This stems from the omission of this feature prior to Exchange 2007 s...

Cloud Class Webinars

  1. Avoiding Bugs in Microsoft Access
    Alison Balter takes and in-depth look at avoiding bugs in Access. In this webinar you will learn about using the immediate window to debug your applications, invoking the debugger, using breakpoints to troubleshoot, stepping through code, setting the next statement to execute, ...
  2. Top 10 Best New Features in Visio 2010
    Scott Helmers gives live demonstrations of the top 10 new features in Visio 2010. This webinar will teach you how to create compelling diagrams by adding shapes to the page with a single click, linking the shapes in a diagram to data in Excel (or SQL Server, or SharePoint), ...
  3. IT Consultant Business Secrets Revealed
    Michael Munger, Experts Exchange tech pro and IT consultant, pulls back the curtain on his very successful businesses and answers question on every IT consultant and business owner should know about. He shares secrets on what he did to solve the 5 most common problems in IT, ...
  4. Disaster Recovery and Business Continuity
    Quest CTO, Mike Billon, gives an overview of the steps involved in building a dunamic disaster recovery plan. Through case studies and an examination of software/hardware tooles for monitoring and testing, you'll gain a better understandin of where you are, where you want ...
  5. Organize Your Visio Diagrams with Containers and Lists
    Scott Helmers uses cross functional flowcharts, wireframe diagrams, data graphic legends and seating charts to teach you: how to ustilize all three new structured diagram components in Visio 2010, the best practices for organizeing shapes in previous version of Visio, how to organize ...
  6. How to Us Objects, Properties, Events and Methods in Microsoft Access
    Alison Dalter gives an in-depbth look at objects, properties, events and methods in Microsoft Access. In this webinar you will learn about using the object browser, referring to objects, working with properties and methods, working with object variables, understanding the ...

Join the Community

Give a Little. Get a Lot.

Join the community of experts here and help other tech pros by answering question in your area of expertise. You can earn FREE access to all Experts Exchange's premium features and resources.

Join the Community

Answers

 

by: JagarmPosted on 2009-07-03 at 05:54:47ID: 24772010

Set those settings through PHP right before you do the upload stuff:

ini_set("upload_max_filesize","100");

do the same thing with the other ones

Let me know how it goes

 

by: JackHodsonPosted on 2009-07-03 at 06:12:47ID: 24772107

Forgive my ignorance but do you mean I should create a php.ini file with that code and upload it to the webspace?
Should it go in the httpdocs (root) of the site?
Should I remove the .htaccess file?

 

by: JagarmPosted on 2009-07-03 at 06:16:02ID: 24772128

You can simply change the setting right from your php file,

let say you have a file called. pictures.php

<?php

ini_set("upload_max_filesize","100");

//then you do the uploading stuff, as I think the upload happens in only one file ... right?

?>

Please let me know if this is unclear.

You must have other stuff in your .htaccess, but comment the line where it changes the settings.

 

by: JackHodsonPosted on 2009-07-03 at 06:27:52ID: 24772199

The .htaccess only has the following:
memory_limit to 24MB
post_max_size to 8MB
upload_max_filesize to 10Mb

so I will remove it.

I am a little unclear with your instructions. The entire page is below in the code snippet, I added the line you said at the beginning of the php.
Yes you are correct, it all happens in the one file.

Jack

<!--HTML-->
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/site_template.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Alfa Romeo Owners Club, Kent and East Sussex Section</title>
<!-- InstanceEndEditable -->
<link rel="stylesheet" href="css/site.css" type="text/css">
<link rel="stylesheet" href="css/lightbox.css" type="text/css"  media="screen">
<script type="text/javascript" src="Templates/js/prototype.js"></script>
<script type="text/javascript" src="Templates/js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="Templates/js/lightbox.js"></script>
<!-- InstanceBeginEditable name="head" -->
 
 
<link href="css/site.css" rel="stylesheet" type="text/css" />
<!-- InstanceEndEditable -->
</head>
<body>
<div id="container">
<div id="header">
<div class="top_banner1">Alfa Romeo Owners Club, <br>Kent & East Sussex Section</div>
<div class="top_banner2"> <img src="images/alfa_romeo_script_with_logo.jpg" alt="Alfa script with logo" width="403" height="62"> </div>
<div class="layout1"> <a href="start.htm"><img src="images/home_button.gif" alt="Home Button" border="0"></a> <a href="news.htm"><img src="images/news_button.gif" alt="News Button" border="0"></a> <a href="aboutus.htm"><img src="images/about_us_button.gif" alt="About Us Button" border="0"></a> <a href="events_2009.htm"><img src="images/events-2009_button.gif" alt="Events 2009 Button" border="0"></a> <a href="past_events.htm"><img src="images/past_events_button.gif" alt="Past Events Button" border="0"></a> <a href="articles.htm"><img src="images/articles_button.gif" alt="Articles Button" border="0"></a></div>
<div class="layout2"> <img src="images/silver_line_1.gif" width="682" height="4"> </div>
</div>
<div class="next_meet"> Next monthly meeting: Thursday 31 July 2009 at <a href="../http://maps.google.co.uk/maps?f=d&source=s_d&saddr=51.305184,0.330995&daddr=A20%2FLondon+Rd&hl=en&geocode=%3BFTHbDgMd9gwFAA&mra=dme&mrcr=0&mrsp=0&sz=17&sll=51.30509,0.33187&sspn=0.003468,0.009613&ie=UTF8&ll=51.30509,0.33187&spn=0.013871,0.038452&z=15" target="_blank">The Moat, Wrotham</a></div>
<div class="content1"><!-- InstanceBeginEditable name="Content_Region1" -->
  <br /><?php
 
ini_set("upload_max_filesize","100");?>
    <?
     if($_SERVER['REQUEST_METHOD']!='POST') {
?>
  </p>
  <p>  </p>
  <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="Photo Uploader" id="Photo Uploader">
  <table width="375" style="background-color: #FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
    <tr>
      <td width="365" style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Upload your car or event photos here:</td>
    </tr>
    <tr>
      <td style="text-align:left"><input name="file" type="file" size="35" /></td>
    </tr>
    <tr>
      <td style="text-align:center"><input type="submit" name="Submit" value=":.Send.:" /></td>
    </tr>
  </table>
</form>
<?
} else {
     $message = "";
     $validExtensions[] = "jpg";
     $validExtensions[] = "jpeg";
      $validExtensions[] = "gif";
      $validExtensions[] = "png";
     $sentFileSize = ceil($_FILES['file']['size']/1024);
      # this way is more accurate for the extension
     $sentFileExtension = explode(".", $_FILES['file']['name']);
      $number = count($sentFileExtension);
      $sentFileExtension = strtolower($sentFileExtension[$number-1]);
 
      if(!in_array($sentFileExtension, $validExtensions)) {
           $message = "<span style=\"color:black; font size:11px\"><br>Your photo has <span style=\"color:red\">NOT</span> been uploaded,";
           $message .= " because of an invalid file type. <br>We only accept .JPG, .GIF and .PNG files.</span>";
      } else {
           // SAVE THE FILE
           $uploaddir = 'images/user_photo_uploads/';
           if (file_exists('images/photo_uploader_count.txt')) {
                $handle = fopen('images/photo_uploader_count.txt','r+');
                $newFileNumber = fread($handle,filesize('images/photo_uploader_count.txt'))+1;
                fclose($handle);
                $handle = fopen('images/photo_uploader_count.txt','w');
                fwrite($handle,$newFileNumber.'');
                fclose($handle);
           } else {
                $handle = fopen('images/photo_uploader_count.txt','x');
                fwrite($handle,'1');
                $newFileNumber = 1;
           }
           $uploadfile = $uploaddir . basename($newFileNumber . "." . $sentFileExtension);
 
 
                $bron = $_FILES['file']['tmp_name'];
                $maxbreedte = 1024;
                }
 
                if(!empty($bron)){
                     $dimensies = getimagesize($bron);
                     $breedte = $dimensies[0];
                     $hoogte = $dimensies[1];
                     if($breedte > $maxbreedte){
                          $nieuwebreedte = $maxbreedte;
                          $deelfactor = $breedte / $maxbreedte;
                          $nieuwehoogte = $hoogte / $deelfactor;
 
                          switch ($dimensies['mime']) {
 
                          case 'image/jpeg':
 
                               $image = imagecreatefromjpeg($bron);
                               $destination = imagecreatetruecolor($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagejpeg($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/gif':
 
                               $image = imagecreatefromgif($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagegif($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/png':
 
                               $image = imagecreatefrompng($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagepng($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
                          }
                     } else {
                          $uploadfile = $uploaddir . basename($newFileNumber. "." .$sentFileExtension);
                             if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
                               chmod($uploadfile, 0644);
                               $message = "Your photo has been saved successfully, to upload another, click Back and repeat.<br>";
                         
                          } else {
                               $message = "There was an error uploading the file, please try again!";
                          }
                     }
                }
           if (is_file($uploadfile)) {
                $message = "<span style=\"color:black; font size:11px\"><br>Your photo has been saved successfully, to upload<br>another, click your browsers back button and repeat.<br>";
 
           } else {
                $message .= "<span style=\"color:black; font size:11px\"><br><br>Please click your browsers back button to try again.";
           }
?>
<br /><table width="500" style="background-color:#FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Photo upload result:</td>
  </tr>
  <tr>
    <td style="text-align:center"><? echo $message ?></td>
  </tr>
</table>
<?
}
?>
<!-- InstanceEndEditable --></div>
<div class="layout4"> <img src="images/silver_line_2.gif" width="682" height="4"></div>
<div class="layout3"> <a href="contactus.htm"><img src="images/contact_us_button.gif" alt="Contact Us Button" border="0"></a> <a href="links.htm"><img src="images/links_button.gif" alt="Links Button" border="0"></a> <a href="forsale.htm"><img src="images/for_sale_button.gif" alt="For Sale Button" border="0"></a> <a href="memberscars.htm"><img src="images/member_cars_button.gif" alt="Members Cars Button" border="0"></a> <a href="servicing.htm"><img src="images/servicing_button.gif" alt="Servicing Button" border="0"></a> <a href="search.htm"><img src="images/search_button.gif" alt="Search Button" border="0"></a></div>
</div>
 
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-367549-3");
pageTracker._trackPageview();
} catch(err) {}</script>
 
</body>
<!-- InstanceEnd --></html>
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:

Select allOpen in new window

 

by: JagarmPosted on 2009-07-03 at 06:32:57ID: 24772226

How you have it now is how I instructed, and it is suppose to work, remove those lines from .htaccess to avoid confusions.

Please let me know how it goes.

Thanks

 

by: JagarmPosted on 2009-07-03 at 06:34:11ID: 24772231

Almost forgot, you should do the same thing with memory_limit, and post_max_size, simply put them right after or before (whoever you like) the ini_set("upload_max_filesize","100");

 

by: JackHodsonPosted on 2009-07-03 at 06:46:29ID: 24772301

OK, thanks, I will need to add the
memory_limit and post_max_size now.

Is it ok like this, I am not sure how they should be separated?:

<?php
 
ini_set("upload_max_filesize","100");
ini_set("memory_limit","100");
ini_set("post_max_size","100");
?>
    <?
     if($_SERVER['REQUEST_METHOD']!='POST') {
?>

 

by: Seo_ExpertPosted on 2009-07-03 at 06:49:08ID: 24772314

Hello Jack,

This may happened because you do not have right (permission) to override default .httaccess files.
Please contact your web hosting provider if you have to increase more limit.

 

by: JagarmPosted on 2009-07-03 at 06:50:25ID: 24772319

That is good how you have it.

 

by: JackHodsonPosted on 2009-07-03 at 06:52:31ID: 24772328

Hi Seo,

I did conntact them initially and they told me to create use an .htaccess file. If I make changes to this file it is immediately reflected in this: http://arockes.org.uk/images/user_photo_uploads/php_info.php

Appreciate the help guys, php makes css (which I have just begun with) look easy!

 

by: JackHodsonPosted on 2009-07-03 at 07:49:28ID: 24772697

Still not working im afraid.
Latest code below.

<!--HTML-->
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"><!-- InstanceBegin template="/Templates/site_template.dwt" codeOutsideHTMLIsLocked="false" -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- InstanceBeginEditable name="doctitle" -->
<title>Alfa Romeo Owners Club, Kent and East Sussex Section</title>
<!-- InstanceEndEditable -->
<link rel="stylesheet" href="css/site.css" type="text/css">
<link rel="stylesheet" href="css/lightbox.css" type="text/css"  media="screen">
<script type="text/javascript" src="Templates/js/prototype.js"></script>
<script type="text/javascript" src="Templates/js/scriptaculous.js?load=effects,builder"></script>
<script type="text/javascript" src="Templates/js/lightbox.js"></script>
<!-- InstanceBeginEditable name="head" -->
 
 
<link href="css/site.css" rel="stylesheet" type="text/css" />
<!-- InstanceEndEditable -->
</head>
<body>
<div id="container">
<div id="header">
<div class="top_banner1">Alfa Romeo Owners Club, <br>Kent & East Sussex Section</div>
<div class="top_banner2"> <img src="images/alfa_romeo_script_with_logo.jpg" alt="Alfa script with logo" width="403" height="62"> </div>
<div class="layout1"> <a href="start.htm"><img src="images/home_button.gif" alt="Home Button" border="0"></a> <a href="news.htm"><img src="images/news_button.gif" alt="News Button" border="0"></a> <a href="aboutus.htm"><img src="images/about_us_button.gif" alt="About Us Button" border="0"></a> <a href="events_2009.htm"><img src="images/events-2009_button.gif" alt="Events 2009 Button" border="0"></a> <a href="past_events.htm"><img src="images/past_events_button.gif" alt="Past Events Button" border="0"></a> <a href="articles.htm"><img src="images/articles_button.gif" alt="Articles Button" border="0"></a></div>
<div class="layout2"> <img src="images/silver_line_1.gif" width="682" height="4"> </div>
</div>
<div class="next_meet"> Next monthly meeting: Thursday 31 July 2009 at <a href="../http://maps.google.co.uk/maps?f=d&source=s_d&saddr=51.305184,0.330995&daddr=A20%2FLondon+Rd&hl=en&geocode=%3BFTHbDgMd9gwFAA&mra=dme&mrcr=0&mrsp=0&sz=17&sll=51.30509,0.33187&sspn=0.003468,0.009613&ie=UTF8&ll=51.30509,0.33187&spn=0.013871,0.038452&z=15" target="_blank">The Moat, Wrotham</a></div>
<div class="content1"><!-- InstanceBeginEditable name="Content_Region1" -->
  <br /><?php
 
ini_set("upload_max_filesize","100");
ini_set("memory_limit","100");
ini_set("post_max_size","100");
?>
    <?
     if($_SERVER['REQUEST_METHOD']!='POST') {
?>
  </p>
  <p>  </p>
  <form action="<? echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data" name="Photo Uploader" id="Photo Uploader">
  <table width="375" style="background-color: #FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
    <tr>
      <td width="365" style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Upload your car or event photos here:</td>
    </tr>
    <tr>
      <td style="text-align:left"><input name="file" type="file" size="35" /></td>
    </tr>
    <tr>
      <td style="text-align:center"><input type="submit" name="Submit" value=":.Send.:" /></td>
    </tr>
  </table>
</form>
<?
} else {
     $message = "";
     $validExtensions[] = "jpg";
     $validExtensions[] = "jpeg";
      $validExtensions[] = "gif";
      $validExtensions[] = "png";
     $sentFileSize = ceil($_FILES['file']['size']/1024);
      # this way is more accurate for the extension
     $sentFileExtension = explode(".", $_FILES['file']['name']);
      $number = count($sentFileExtension);
      $sentFileExtension = strtolower($sentFileExtension[$number-1]);
 
      if(!in_array($sentFileExtension, $validExtensions)) {
           $message = "<span style=\"color:black; font size:11px\"><br>Your photo has <span style=\"color:red\">NOT</span> been uploaded,";
           $message .= " because of an invalid file type. <br>We only accept .JPG, .GIF and .PNG files.</span>";
      } else {
           // SAVE THE FILE
           $uploaddir = 'images/user_photo_uploads/';
           if (file_exists('images/photo_uploader_count.txt')) {
                $handle = fopen('images/photo_uploader_count.txt','r+');
                $newFileNumber = fread($handle,filesize('images/photo_uploader_count.txt'))+1;
                fclose($handle);
                $handle = fopen('images/photo_uploader_count.txt','w');
                fwrite($handle,$newFileNumber.'');
                fclose($handle);
           } else {
                $handle = fopen('images/photo_uploader_count.txt','x');
                fwrite($handle,'1');
                $newFileNumber = 1;
           }
           $uploadfile = $uploaddir . basename($newFileNumber . "." . $sentFileExtension);
 
 
                $bron = $_FILES['file']['tmp_name'];
                $maxbreedte = 1024;
                }
 
                if(!empty($bron)){
                     $dimensies = getimagesize($bron);
                     $breedte = $dimensies[0];
                     $hoogte = $dimensies[1];
                     if($breedte > $maxbreedte){
                          $nieuwebreedte = $maxbreedte;
                          $deelfactor = $breedte / $maxbreedte;
                          $nieuwehoogte = $hoogte / $deelfactor;
 
                          switch ($dimensies['mime']) {
 
                          case 'image/jpeg':
 
                               $image = imagecreatefromjpeg($bron);
                               $destination = imagecreatetruecolor($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagejpeg($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/gif':
 
                               $image = imagecreatefromgif($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagegif($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
 
                          case 'image/png':
 
                               $image = imagecreatefrompng($bron);
                               $destination = imagecreate($nieuwebreedte, $nieuwehoogte);
                               imagecopyresampled($destination, $image, 0, 0, 0, 0, $nieuwebreedte, $nieuwehoogte, $breedte, $hoogte);
                               imagepng($destination, $uploadfile);
                              imagedestroy($image);
                              imagedestroy($destination);
                          break;
                          }
                     } else {
                          $uploadfile = $uploaddir . basename($newFileNumber. "." .$sentFileExtension);
                             if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
                               chmod($uploadfile, 0644);
                               $message = "Your photo has been saved successfully, to upload another, click Back and repeat.<br>";
                         
                          } else {
                               $message = "There was an error uploading the file, please try again!";
                          }
                     }
                }
           if (is_file($uploadfile)) {
                $message = "<span style=\"color:black; font size:11px\"><br>Your photo has been saved successfully, to upload<br>another, click your browsers back button and repeat.<br>";
 
           } else {
                $message .= "<span style=\"color:black; font size:11px\"><br><br>Please click your browsers back button to try again.";
           }
?>
<br /><table width="500" style="background-color:#FFFFFF;border:1px solid; border-color:#DDDDDD;" border="0" cellspacing="2" cellpadding="2">
  <tr>
    <td style="font-weight:normal; color:#000000;background-color:#FFFFFF;">Photo upload result:</td>
  </tr>
  <tr>
    <td style="text-align:center"><? echo $message ?></td>
  </tr>
</table>
<?
}
?>
<!-- InstanceEndEditable --></div>
<div class="layout4"> <img src="images/silver_line_2.gif" width="682" height="4"></div>
<div class="layout3"> <a href="contactus.htm"><img src="images/contact_us_button.gif" alt="Contact Us Button" border="0"></a> <a href="links.htm"><img src="images/links_button.gif" alt="Links Button" border="0"></a> <a href="forsale.htm"><img src="images/for_sale_button.gif" alt="For Sale Button" border="0"></a> <a href="memberscars.htm"><img src="images/member_cars_button.gif" alt="Members Cars Button" border="0"></a> <a href="servicing.htm"><img src="images/servicing_button.gif" alt="Servicing Button" border="0"></a> <a href="search.htm"><img src="images/search_button.gif" alt="Search Button" border="0"></a></div>
</div>
 
<script type="text/javascript">
var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");
document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E"));
</script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-367549-3");
pageTracker._trackPageview();
} catch(err) {}</script>
 
</body>
<!-- InstanceEnd --></html>
                                              
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:

Select allOpen in new window

 

by: JagarmPosted on 2009-07-03 at 07:59:18ID: 24772756

There are certain php configurations that have limits on where they can be configured, so for upload_max_filesize is set to PHP_INI_PERDIR, which means it can either be set in php.ini, .htaccess or httpd.conf, that may be the reason it is not working.

 

by: JagarmPosted on 2009-07-03 at 08:18:01ID: 24772856

Put the following in your .htacess and let me know if it works, because it works for me.

RewriteEngine on
php_value upload_max_filesize 100M
php_value memory_limit 100MB
php_value post_max_size 100MB

                                              
1:
2:
3:
4:

Select allOpen in new window

 

by: JackHodsonPosted on 2009-07-03 at 08:50:14ID: 24773083

I have done that.

I created a separate test file for this:
http://www.arockes.org.uk/phototest.php

Its was not working for anything ..even tiny files, then I removed the following and it worked again for tiny files.

<?php
 
ini_set("upload_max_filesize","100");
ini_set("memory_limit","100");
ini_set("post_max_size","100");
?>

 

by: JackHodsonPosted on 2009-07-03 at 08:53:35ID: 24773119

http://www.arockes.org.uk/images/user_photo_uploads/php_info.php

The PHP info page now does NOT work for some reason.

 

by: JagarmPosted on 2009-07-03 at 08:53:53ID: 24773123

Do you have php_value in your .htaccess before setting any php settings?

Have you also contacted your host and let them know that is not working?

 

by: JackHodsonPosted on 2009-07-03 at 08:56:10ID: 24773139

In my .htaccess file, literally all there is, is this:

RewriteEngine on
php_value upload_max_filesize 100M
php_value memory_limit 100MB
php_value post_max_size 100MB

I have not told the host yet. I could but I thought it may be the code that is incorrect.

 

by: JagarmPosted on 2009-07-03 at 09:00:58ID: 24773172

Remove the MB beside the last two, that maybe why

 

by: JagarmPosted on 2009-07-03 at 09:08:38ID: 24773204

No sorry, either way should work: MB or M

For phpinfo page, check if there's any errors there, mistyping something, will not throw an error ... in my case at least

 

by: JagarmPosted on 2009-07-03 at 09:11:08ID: 24773217

Based on your phpinfo, the changes has been made, and they are all at 100Megabyte from the default. It should work, because the changes has been made

 

by: JackHodsonPosted on 2009-07-03 at 09:20:26ID: 24773277

This is strange. I changed the MB to Ms in the .htaccess - this fixed php_info. Good!

Then the upload was still not working so I put this back in:

<?php
 
ini_set("upload_max_filesize","100");
ini_set("memory_limit","100");
ini_set("post_max_size","100");
?>

This did not work, so I made the 100s in to "100M"s. I can now upload a 0.6MB photo. A 2.2MB still does not work and gives the blank page after a minute or so (slow upload).

Right, to try and solve this and thinking about it I do not really need the image resize and resample. Do you think it would work if we got rid of that aspect and simply made it a straight forward file uploader?

Many thanks again,
Jack

 

by: JagarmPosted on 2009-07-03 at 09:22:55ID: 24773289

Remove the following:

ini_set("upload_max_filesize","100");
ini_set("memory_limit","100");
ini_set("post_max_size","100");

because they are set in the .htaccess

 

by: JagarmPosted on 2009-07-03 at 09:24:12ID: 24773297

There are restrictions on where each setting can be set.

http://ca2.php.net/manual/en/ini.core.php

 

by: JagarmPosted on 2009-07-03 at 10:01:15ID: 24773468

While setting the memory limit to 100 megabyte, I was getting an error in one of my other scripts, just in case you get that, do the following:

php_value memory_limit -1

which is unlimited or increase the memory up more.

 

by: JackHodsonPosted on 2009-07-03 at 10:49:32ID: 24773677

Not getting anywhere with this unfortunately. Have tried uping the limits, also I read this in your link and made the changes:

  post_max_size  integer -  Sets max size of post data allowed. This setting also affects file upload. To upload large files, this value must be larger than upload_max_filesize. If memory limit is enabled by your configure script, memory_limit also affects file uploading. Generally speaking, memory_limit should be larger than post_max_size .

Still it didn't work. What do you think about removing the resize code and having it just as a straight forward upload?
Is it the resize of the images that is causing this?

Jack

 

by: JagarmPosted on 2009-07-03 at 10:53:14ID: 24773687

Your upload form may be missing something, do you have the following inside your upload form?

the following sets the max file size to 100 megabyte

<input type="hidden" name="MAX_FILE_SIZE" value="104857600" />

 

by: JackHodsonPosted on 2009-07-03 at 10:56:01ID: 24773697

Where should I put this line?

Thanks

 

by: JagarmPosted on 2009-07-03 at 10:58:48ID: 24773708

Anywhere inside the <form> </form> tag, this will be hidden, so it doesn't matter, put it at the very top right after the opening <form> tag

 

by: JackHodsonPosted on 2009-07-03 at 11:03:25ID: 24773727

Same result but thanks for your efforts and persistence.

 

by: JagarmPosted on 2009-07-03 at 11:08:21ID: 24773735

When do you get an error (if any)? and when it says "Your photo has been saved successfully" does it really uploads the file on the server into the provided directory?

 

by: JackHodsonPosted on 2009-07-03 at 11:11:52ID: 24773750

Basically if I upload a file that is more than about 800Kb it will start the upload and then after a bit the screen window will refresh completely blank - the photo will not be in the directory either. If its under about 800Kb then it works fine.

 

by: JagarmPosted on 2009-07-03 at 11:22:33ID: 24773799

Are you using this script: http://www.arockes.org.uk/phototest.php, I uploaded a jpeg of 952 KB and it worked through http://www.arockes.org.uk/phototest.php and I get the screen where it says upload was successful

 

by: JackHodsonPosted on 2009-07-03 at 11:31:30ID: 24773837

if you try a 3MB file, like that of straight from a new digital camera will it still upload for you?

I did manage to get a 1Mb file to upload too - it seems very picky.
Yes it is that script.

 

by: JagarmPosted on 2009-07-03 at 11:35:33ID: 24773851

I don't know about that, because I don't have a digital camera and haven't tried it, but I guess the only way to fail, is for the uploaded not to be able to read the file.

I guess the only way to be sure, is have a note on the site and tell them to move the image in the computer.

Have you tried uploading the 3mb from the digital camera?

 

by: JackHodsonPosted on 2009-07-03 at 11:44:34ID: 24773878

Yes, I have this script which is on a different host which has no problems with 5MB files.

www.cloverleaf4.co.uk/upload.php

I think I need to get on to the host and see if they can help.

 

by: JackHodsonPosted on 2009-07-03 at 11:45:35ID: 24773884

If you can, download this file and try it on the upload:
http://upload.wikimedia.org/wikipedia/en/7/7b/Space_Ship_2_Jan_2008.jpg

 

by: JagarmPosted on 2009-07-03 at 11:49:02ID: 24773899

Sure, it is currently downloading, I'll let you know the result, I will upload using http://www.arockes.org.uk/phototest.php

 

by: JagarmPosted on 2009-07-03 at 11:58:45ID: 24773943

I downloaded the image you provided and uploaded, and yes I got the blank screen. Please put this at the very top of that page: error_reporting(E_ALL); so it displays all the errors



 

by: JagarmPosted on 2009-07-03 at 11:59:55ID: 24773950

Are you also watermarking the images that are being uploaded?

 

by: JackHodsonPosted on 2009-07-03 at 16:10:48ID: 24774901

No watermarking on the photos. I think I need to give up with this for now. Just can not work it out. I added error_reporting(E_ALL) but it didnt give anything away at all when giving the blank page.

<?php
error_reporting(E_ALL);
?>
    <?
     if($_SERVER['REQUEST_METHOD']!='POST') {
?>

Is it ok inserted like this?

 

by: JagarmPosted on 2009-07-03 at 21:15:35ID: 24775687

If you look at your code in the question at the top, on line 55 there is             $maxbreedte = 1024; which I'm not sure what is that, it maybe maximum height or width.

Maybe that is what is giving problems

 

by: JackHodsonPosted on 2009-07-04 at 02:34:50ID: 24776431

Tried removing that but no joy. I will contact the host and let you know. Thanks.

 

by: JackHodsonPosted on 2009-07-10 at 08:29:04ID: 24824319

They are not sure on the problem either - they asked me to change some more limits in the htaccess file but still no joy. Time to give up unfortunately. Thanks for your attempts though.

Jack

 

by: JagarmPosted on 2009-07-10 at 08:56:51ID: 24824621

I'm sorry to hear that your host didn't do anything, I have PHP 5.2.10 installed on Apache 2 on Windows XP Sp2. The following is the content of the htaccess:

RewriteEngine on
php_value upload_max_filesize 100M
php_value memory_limit 100M
php_value post_max_size 100M

Using the original script in your question, allows me to upload any size pictures even the
http://upload.wikimedia.org/wikipedia/en/7/7b/Space_Ship_2_Jan_2008.jpg with no problem.

Could you please copy the original script into a file, just call it test.php and run it, and see if that works, and make sure to have .htaccess with the above content in it.

Let me know how it went,

 

by: JackHodsonPosted on 2009-07-10 at 09:00:51ID: 24824666

Can I ask, what upload speed is available to you from your ISP?

They thought it may be that my upload is very slow (0.3mbps). They also had no problems either but they have a big fat leased line.

 

by: JackHodsonPosted on 2009-07-10 at 09:01:43ID: 24824677

Also, does it matter where the .htaccess file is located on the webspace?

 

by: JagarmPosted on 2009-07-10 at 09:03:44ID: 24824699

Sorry I forgot to mention, but I ran it locally, on my computer

 

by: JagarmPosted on 2009-07-10 at 09:04:24ID: 24824706

I don't think it matters, as long as it is in the same subdomain, but to be on the safe side, just make an .htaccess in the same location as the script

 

by: JackHodsonPosted on 2009-08-18 at 03:35:39ID: 25121666

Hi, I will close this question. The script that was written for me some time ago that I referred to in the first line of my question worked unedited so there must be something vital that I removed.

Points awarded to Jagarm, very grateful for the effort you went to to try and help me solve this.

Thanks
Jack

 

by: JackHodsonPosted on 2009-08-18 at 03:37:45ID: 31599531

Not a solution but grateful for the efforts.

20120131-EE-VQP-002

3 Ways to Join

30-Day Free Trial

The Experts

98% positive feedback on 31,087 answers since March 2000. angeliii is a Microsoft Most Valuable Professional for his work with MS SQL Server & Develoment.

He has also proven his knowledge of Visual Basic Programming, PHP Scripting and Oracle Databases.

The Experts

97% positive feedback on 10,752 answers since July 2000. lrmoore has more than 18 years experience in the networking industry.

The six-time Mircosoft MVPs specialties include firewalls, virtual private networking, and network management.

Testimonials

"...and excellent source for support... Kind of like having your very own IT dept." Electriciansnet

Testimonials

"I was apprehensive at signing up at first. However... it has already made my life as an IT administrator much easier." JaCrews

Testimonials

"WOW! You guys have great, active, and knowledgeable people on here." moore50

Business Clients

Business Clients

In the Press

"If you’ve got a question... Experts Exchange can supply an answer.”

In the Press

"...an invaluable aid for both IT professionals and those who require tech support."

In the Press

"where IT professionals provide quick answers on just about any topic"

Business Account Plans

Loading Advertisement...