Looking at the code this method tries to detect the temporary path when there is no path set.
But it is only called when you do not set a target directory.

You could simply prevent this by setting a own path with setDestination() when the detection does not work in your environment.

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Cameron" <themsel...@gmail.com>
To: "Thomas Weidner" <thomas.weid...@gmx.at>
Cc: "Zend Framework - General" <fw-general@lists.zend.com>
Sent: Wednesday, December 17, 2008 9:54 AM
Subject: Re: [fw-general] Unusual bug introduced with 1.7.1 in Zend_File.


Yep, $tmpdir is empty. That must mean none of the entire _getTmpDir method
works in my environment, at least in the context of $adapter->getFileName().
Looking over the _getTmpDir method it, I find that...

          if (empty($this->_tmpDir)) {
               // Attemp to detect by creating a temporary file
               $tempFile = tempnam(md5(uniqid(rand(), TRUE)), '');
               if ($tempFile) {
                   $tmpdir = realpath(dirname($tempFile));
                   unlink($tempFile);
               } else
{

                   require_once 'Zend/File/Transfer/Exception.php';
                   throw new Zend_File_Transfer_Exception('Could not
determine temp directory');
               }
           }

it enters this conditional statement, yet seems to escape it without
throwing that exception. so the tempfile check isn't working. not 100% sure what you guys are trying to do with this check, but whatever it is, it's not
working on my server :)

On Wed, Dec 17, 2008 at 4:53 PM, Thomas Weidner <thomas.weid...@gmx.at>wrote:

Cameron,

to go further with debugging you can see that your exception is called in
the file Abstract on line 948.
Now simply output the destination directory on line 947 so you can see
which directory you set.

Then check if the directory which is set there
* does exist
* has write access

Do this checks within your application as your user can have other rights
than the webserver.

I am sure you will see where the problem is.

To note:
This is default debugging strategy... there is no magic ZF action or
knowledge necessary. :-)

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Cameron" <themsel...@gmail.com>
To: "Thomas Weidner" <thomas.weid...@gmx.at>
Cc: "Zend Framework - General" <fw-general@lists.zend.com>
Sent: Wednesday, December 17, 2008 1:59 AM

Subject: Re: [fw-general] Unusual bug introduced with 1.7.1 in Zend_File.


 here's the full $e.

http://pastebin.com/m5d442e15

the line in my code, line 83, that is definitely where it is calling
$adapter->getFileName().

On Tue, Dec 16, 2008 at 7:01 PM, Thomas Weidner <thomas.weid...@gmx.at
>wrote:

 Cameron,

when you have unexpected exceptions somewhere in your code it's always
usefull to get the whole exception and not only the rethrown content.

This would be really helpfull, not only for ZF but for every generic
problem where exceptions are thrown.

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Cameron" <themsel...@gmail.com>
To: "Thomas Weidner" <thomas.weid...@gmx.at>
Cc: "Zend Framework - General" <fw-general@lists.zend.com>
Sent: Tuesday, December 16, 2008 10:47 AM
Subject: Re: [fw-general] Unusual bug introduced with 1.7.1 in Zend_File.



 Yeah ok, so that's all a bit messy/broken, but I've cleaned it up and
it's

still doing the same thing:

here's the cleaned up code in a pastebin:

http://pastebin.com/m5bab1a44

the output is:

Array ( [0] => bbbThe given destination is no directory or does not
exist
)

To test and make sure, i reverted to 1.7.0, still works fine.


On Tue, Dec 16, 2008 at 5:31 PM, Thomas Weidner <thomas.weid...@gmx.at
>wrote:

 Hy Cameron,


Why should the first catch, catch anything when there is a failure ?
According to manual, receive() returns a false on failure, not an
exception.

Also you are calling getFileName in any case, regardless if the form is
valid or not.

Greetings
Thomas Weidner, I18N Team Leader, Zend Framework
http://www.thomasweidner.com

----- Original Message ----- From: "Cameron" <themsel...@gmail.com>
To: "Zend Framework - General" <fw-general@lists.zend.com>
Sent: Tuesday, December 16, 2008 7:25 AM
Subject: [fw-general] Unusual bug introduced with 1.7.1 in Zend_File.



         if ($form->isValid($formData)) {

             //the form is valid, finish moving the file about

            $adapter = new Zend_File_Transfer_Adapter_Http();
            if ($adapter->isValid() === false) {
                print_r($adapter->getMessages());
            }

            try {
                $adapter->setDestination($path .
"/$src_class/$foreign_id")
                        ->receive();
            } catch (Exception $e) {
                $errors[] = $e->getMessage();
            }
        }

        if (!$errors) {
            //if there are no errors with things so far, add a db
record.
            try {
$this->_model->add(array('foreign_id' => $foreign_id,
'filename' => $adapter->getFileName(), 'src_class' => $src_class,
'type'
=>
$formData['newform']['type']));
            }
            catch (Exception $e) {
                $errors[] = $e->getMessage();
            }
        }


This works perfectly with 1.7.0, fails in 1.7.1 with a really odd
problem
-
it doesn't fail until the SECOND catch Exception, and the error it
returns
is "The given destination is no directory or does not exist", which it
most
certainly does because the file is being uploaded and moved in to
place
just
fine, nor can I see how the setDestinaton method is being called by
the
getFileName method?
This is all a bit too weird for me, I'm not really sure what's going
on.
printing out variables as the setDestination method is being called
shows
a
perfectly fine path, and the file is being written... there's just
this
exception being thrown at some point. If one of you Zend guys has a
good
place for me to start debugging this one from I'm more than happy to
help.











Reply via email to