Beefy Boxes and Bandwidth Generously Provided by pair Networks
"be consistent"
 
PerlMonks  

Re^2: CGI hook

by ikegami (Patriarch)
on Aug 08, 2006 at 02:39 UTC ( [id://566050]=note: print w/replies, xml ) Need Help??


in reply to Re: CGI hook
in thread CGI hook

I don't think there's any provision in CGI.pm's new function for a coderef as argument.

You should have checked the docs before replying.

You can set up a callback that will be called whenever a file upload is being read during the form processing. This is much like the UPLOAD_HOOK facility available in Apache::Request, with the exception that the first argument to the callback is an Apache::Upload object, here it's the remote filename.

$q = CGI->new(\&hook [,$data [,$use_tempfile]]); sub hook { my ($filename, $buffer, $bytes_read, $data) = @_; print "Read $bytes_read bytes of $filename\n"; }

Replies are listed 'Best First'.
Re^3: CGI hook
by Zaxo (Archbishop) on Aug 08, 2006 at 03:23 UTC

    In my CGI.pm, that passage reads,

               You can set up a callback that will be called whenever a
           file upload is being read during the form processing. This
           is much like the UPLOAD_HOOK facility available in
           Apache::Request, with the exception that the first
           argument to the callback is an Apache::Upload object, here
           it's the remote filename.
    
            $q = CGI->new();
            $q->upload_hook(\&hook,$data);
    
            sub hook
            {
                   my ($filename, $buffer, $bytes_read, $data) = @_;
                   print  "Read $bytes_read bytes of $filename\n";
            }
    
    
    The hook is not an argument to new, but is set in the upload_hook method.

    After Compline,
    Zaxo

      That example in the CGI.pm docs never worked right. upload_hook can only be used as a function call, not as a method call. This is because when you create a new CGI object, it immediately calls 'init' which parses the request information, and that includes handling any file uploads. So by the time new returns, the file upload has already been handled and hence it is too late to set up the upload hook. That is why it was changed so that you pass the upload hook as a parameter to new.

      However, when using the functional interface you can use the upload_hook function, as long as you call it before you make any other calls.

      It was added as an option to new() in version 3.12. For versions before that, you are right. Current version is 3.20 btw.
      Timeline for upload_hook support:
      • 3.01 - upload_hook support added
      • 3.03 - support for upload_hook configuration in new() added
      • 3.12 - documentation updated to reflect change that was made in 3.03
      Found the correction for 3.12 by checking the change list:

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://566050]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others meditating upon the Monastery: (3)
As of 2025-01-14 16:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Which URL do you most often use to access this site?












    Results (42 votes). Check out past polls.