SitePoint Sponsor

User Tag List

Results 1 to 8 of 8
  1. #1
    SitePoint Addict
    Join Date
    Feb 2003
    Location
    Berlin
    Posts
    370
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Script not working from some directories

    Hi,

    I am using a script to read file sizes out of ZIP compressed image files (http://www.sitepoint.com/forums/showthread.php?t=663771). For some reason the script is working perfectly in one directory, but not in any other.

    Both directories are subdirectories of the webserver root directory.
    owner, group and access rights are the same. There is no special .htaccess file for these folders.

    I now turned on all PHP error messages. For the not working directory I get following message:
    Strict Standards: getimagesize() [function.getimagesize]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' instead in /srv/www/vhosts/domain.tld/httpdocs/_test/zip.php on line 42

    Warning: getimagesize(bild.jpg) [function.getimagesize]: failed to open stream: No such file or directory in /srv/www/vhosts/domain.tld/httpdocs/_test/zip.php on line 42


    Line 42 is 'list($width, $height) = getimagesize($filename);'

    And this is the complete code:
    PHP Code:
    <?php



    $dbfilename    
    "/srv/www/vhosts/domain.tld/httpdocs/1-tests/bild.zip";

    if (
    preg_match('/\.zip\b/i'$dbfilename)) {

    $zip = new ZipArchive();
    if (
    true !== $zip->open($dbfilename))
    {
        throw new 
    Exception('ZIP archive, '.$dbfilename.', konnte nicht geoeffnet werden!');
    }

    // Search for the image file.
    for($i 0$i $zip->numFiles$i++)
    {
        
    $entry $zip->statIndex($i);
        
    $ext substr($entry['name'], -3);
        
        if (
    in_array($ext, array('jpg''jpeg''png''psd''tif''tiff''pdf''gif''pct')) && (!preg_match('/\/\./i'$entry['name'])))
        {
            
    $filename $entry['name'];
        }
    }

    if (isset(
    $filename) && ($image $zip->getFromName($filename)))
    {



           list(
    $width$height) = getimagesize($filename);
        echo 
    "w $width - h $height<br />";
    }
    else
    {
        throw new 
    Exception('No image found');
    }

    }
    else {
    }

    ?>
    I really don't understand what is happening on this server...

    Thanks for any help!

    Regards
    Fl&#246;zen

  2. #2
    SitePoint Wizard silver trophybronze trophy Cups's Avatar
    Join Date
    Oct 2006
    Location
    France, deep rural.
    Posts
    6,869
    Mentioned
    17 Post(s)
    Tagged
    1 Thread(s)
    Maybe not your answer, but this line makes little sense to me;

    $ext = substr($entry['name'], -3);

    when some of the permitted extensions are 4 chars long, jpeg, tiff etc

  3. #3
    SitePoint Addict
    Join Date
    Feb 2003
    Location
    Berlin
    Posts
    370
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Cups View Post
    Maybe not your answer, but this line makes little sense to me;

    $ext = substr($entry['name'], -3);

    when some of the permitted extensions are 4 chars long, jpeg, tiff etc
    Yes, thanks for that hint.

    But I still hope, someone has a tip for my major problem!

    Regards
    Fl÷zen

  4. #4
    SitePoint Evangelist AlienDev's Avatar
    Join Date
    Feb 2007
    Location
    UK
    Posts
    591
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Cups View Post
    Maybe not your answer, but this line makes little sense to me;

    $ext = substr($entry['name'], -3);

    when some of the permitted extensions are 4 chars long, jpeg, tiff etc
    If I recognize the code correctly, it is mine from a few weeks ago! I assumed extension is only 3 chars because the original code was looking for "images" which I thought meant .jpg, .png, .gif.

    Floezen, you can't just copy-paste other people's code without understanding it. To improve in any language, you need to try doing things yourself.
    Me on StackOverflow | Blog & personal website.

    I mostly use: PHP, Java, JavaScript, Android.

  5. #5
    SitePoint Addict
    Join Date
    Feb 2003
    Location
    Berlin
    Posts
    370
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by AlienDev View Post
    Floezen, you can't just copy-paste other people's code without understanding it. To improve in any language, you need to try doing things yourself.
    How do you know, that I don't understand it, just because, there are some minor errors? The code is not final and not what I will use in the end.
    Nevertheless you all are missing the discussion.

    The question is, why does this test code work from one directory, but not another???

    - User rights, owners, groups are identical.
    - PHP file and ZIP file are both copied (working) originals.
    - There is no .htaccess file for these directories, which could change behavior
    - I can change the name of the working directory and the code will still work (when I change the zip file path accordingly).

    "Trying myself" did not bring me further with this issue. So maybe I really do not understand some part of the code , but please tell me, what part of this code could be influenced by the location. (except $dbfilename )

    PHP Code:
    $dbfilename    "/srv/www/vhosts/domain.tld/httpdocs/_test/bild.zip";


    $zip = new ZipArchive();
    $zip->open($dbfilename);
    // Search for the image file.
    for($i 0$i $zip->numFiles$i++)
    {
        
    $entry $zip->statIndex($i);
        
    $ext substr($entry['name'], -3);
        
        if (
    in_array($ext, array('jpg')) && (!preg_match('/\/\./i'$entry['name'])))
        {
            
    $filename $entry['name'];
        }
    }

           list(
    $width$height) = getimagesize($filename);
        echo 
    "w $width - h $height<br />"

    Thanks
    Floezen

  6. #6
    SitePoint Wizard silver trophybronze trophy Cups's Avatar
    Join Date
    Oct 2006
    Location
    France, deep rural.
    Posts
    6,869
    Mentioned
    17 Post(s)
    Tagged
    1 Thread(s)
    you have to debug bild.zip

    start echoing variables onto the page to find out which directory bild thinks it is in, is it in the right directory? Prove it, echo some useful variables onto the page.

    Does it recognise the images in that directory? Prove it, echo them onto the page.

    Take it from there, ask questions and prove things in a structured logical fashion until you understand more about the script you are dealing with. Its called debugging and welcome to the club.

    Lets hope the zip file is well written, eh?

    My previous comment might have explained why some kind of hiccup would occur if the first image that the computer picked up was a .jpeg image.

  7. #7
    SitePoint Addict
    Join Date
    Feb 2003
    Location
    Berlin
    Posts
    370
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by Cups View Post
    Lets hope the zip file is well written, eh?
    Thats probably part of the point...

    I played around for some time and found out following:

    Part of the problem must be the zip file, the other problem is probably the location. The strange thing is, that the original ZIP file works fine. Only any copy of it is problematic.

    The ZIP file includes following files:

    Code:
    Files: bild.jpg
    Files: __MACOSX/
    Files: __MACOSX/._bild.jpg
    I now added some lines to check file owner and permissions:

    PHP Code:
        echo "Owner: ".fileowner($entry['name'])."<br />";
        echo 
    "Permission: ".fileperms($entry['name'])."<br />"
    The interesting thing is, that the working file gives some owner and permission output for the image file (not the others):
    Files: bild.jpg
    Owner: 10001
    Permission: 33188


    while the non working ZIP file shows warnings for all:

    Files: bild.jpg

    Warning: fileowner() [function.fileowner]: stat failed for bild.jpg in /srv/www/vhosts/domain.local/httpdocs/_test/zip.php on line 26
    Owner:
    Warning: fileperms() [function.fileperms]: stat failed for bild.jpg in /srv/www/vhosts/domain.local/httpdocs/_test/zip.php on line 27
    Permission:


    The next point is, that it looks like the file has to be in the same directory of the php script, otherwise again owner and permission errors occur.

    Does anyone have a suggestion, how to solve this second problem?

    Regards
    Fl÷zen

  8. #8
    SitePoint Addict
    Join Date
    Feb 2003
    Location
    Berlin
    Posts
    370
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    OK, I found a working way, by using extracting the Image file to a temp directory with
    PHP Code:
    $zip->extractTo 
    This works fine now.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •