Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change

Re^2: Cgi-bin : printing .txt files

by teddyttas (Novice)
on Jan 07, 2013 at 09:57 UTC ( #1012007=note: print w/replies, xml ) Need Help??

in reply to Re: Cgi-bin : printing .txt files
in thread Cgi-bin : printing .txt files

Sorry, I've been doing some other projects and I've a little forgot this subject for a while.

what I would like to add to my site is the possibility to save projects in a file in order to let the user download a zip (I'm watching the package Archive::Zip in order to do this), when they are done (My site is an attempt to make object oriented programmation easier. The result of the user's work on the site should be a number of pm files to download)

I can create a temporary directory on the server, but I only get to create it on the cgi-bin dir.

I would like to create it on the public html dir, cause in cgi-bin, as a txt file is a non-executable file, it doesn't let me show the content on the browser. I would like to be able to do that to so that the user could check the files he is creating while working.

When I try to do this locally, there is no problem, but on the server I can't acces the cgi-bin's upper folder and create there my temporary dir to store the txt files.

It's the first time I try to run a script on a server, so please, be patient :)
When I'll be done with this project I hope I'll be able to return something useful to the community.

P.S. : here is the part of the script that creates me the tmp dir on the cgi-bin :

my $dirname ="tmp/$utilisateur"; mkdir("$dirname"); open FILE, ">", "$dirname/file.txt" or die $!; foreach my $key ($q->param()) { print FILE $key . " " . $q->param($key) . "\n"; } close FILE; return $self->redirect("");
I tried to modify the dirname variable in many ways, starting from the classic :
my $dirname ="../tmp/$utilisateur";
but I wasn't able to make it work

Replies are listed 'Best First'.
Re^3: Cgi-bin : printing .txt files
by kennethk (Abbot) on Jan 07, 2013 at 15:07 UTC

    To quote Archive::Zip,

    One of the most common ways to use Archive::Zip is to generate Zip files in-memory
    I generally find dealing with tmp files in a web context is messier than doing this all in memory, but that's my two cents and not the question you asked.

    The directory creation problem is likely an issue with file permissions. From a web security perspective, I think that limitation makes a lot of sense, but if your server admin is comfortable with what you want to do, you should be able to accomplish this by modding whatever use your web server runs with (apache, perhaps) to have write privileges in /var/www/html or whatever yours is.

    Rather than taking your approach, and assuming you are committed to doing this via redirect instead of just simple streaming, I would create the files in question in the /tmp directory and then provide a link to a script whose whole function is opening the file (name passed in the query string). Again, this has web security problems, since a naive implementation gives a bad person access to read your entire file system. Note you will have to also implement some kind of cache cleaning behavior in a separate script, probably via cron job.

    #11929 First ask yourself `How would I do this without a computer?' Then have the computer do it the same way.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1012007]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others musing on the Monastery: (3)
As of 2018-06-25 04:30 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (126 votes). Check out past polls.