fork download
  1. use strict;
  2. use CGI;
  3. use CGI::Carp qw ( fatalsToBrowser );
  4. use File::Basename;
  5.  
  6. $CGI::POST_MAX = 1024 * 1024 * 50;
  7. my $safe_filename_characters = "a-zA-Z0-9_.-";
  8. my $upload_dir = "/var/www/upload";
  9.  
  10. my $query = new CGI;
  11. if ( $query->request_method() eq 'GET' )
  12. {
  13. print $query->header ( );
  14. print <<END_HTML;
  15. <!doctype html>
  16. <head>
  17. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  18. <title>Upload</title>
  19. </head>
  20. <body>
  21. <form action="." method="post" enctype="multipart/form-data">
  22. <input type="file" name="filename">
  23. <input type="submit">
  24. </form>
  25. </body>
  26. </html>
  27. END_HTML
  28. }
  29.  
  30. my $filename = $query->param("filename");
  31.  
  32. if ( !$filename )
  33. {
  34. print $query->header ( );
  35. print "There was a problem uploading your file (try a smaller file).";
  36. }
  37.  
  38. my ( $name, $path, $extension ) = fileparse ( $filename, '..*' );
  39. $filename = $name . $extension;
  40. $filename =~ tr/ /_/;
  41. $filename =~ s/[^$safe_filename_characters]//g;
  42.  
  43. if ( $filename =~ /^([$safe_filename_characters]+)$/ )
  44. {
  45. $filename = $1;
  46. }
  47. else
  48. {
  49. die "Filename contains invalid characters";
  50. }
  51.  
  52. my $upload_filehandle = $query->upload("filename");
  53.  
  54. open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!";
  55. binmode UPLOADFILE;
  56.  
  57. while ( <$upload_filehandle> )
  58. {
  59. print UPLOADFILE;
  60. }
  61.  
  62. close UPLOADFILE;
  63.  
  64. print $query->header ( );
  65. print <<END_HTML;
  66. <!doctype html>
  67. <head>
  68. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  69. <title>Upload complete</title>
  70. </head>
  71. <body>
  72. <p>File uploaded, thanks.</p>
  73. </body>
  74. </html>
  75. END_HTML
  76.  
Runtime error #stdin #stdout #stderr 0.03s 5196KB
stdin
Standard input is empty
stdout
Status: 500
Content-type: text/html

<h1>Software error:</h1>
<pre>Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$name&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$path&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$extension&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$name&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$extension&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$upload_filehandle&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$filename&quot; requires explicit package name at prog.pl line 14.
Global symbol &quot;$upload_filehandle&quot; requires explicit package name at prog.pl line 14.
Missing right curly or square bracket at prog.pl line 77, at end of line
  (Might be a runaway multi-line &lt;&lt; string starting on line 14)
prog.pl has too many errors.
</pre>
<p>
For help, please send mail to this site's webmaster, giving this error message 
and the time and date of the error.

</p>
stderr
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$name" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$path" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$extension" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$name" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$extension" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$upload_filehandle" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$filename" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Global symbol "$upload_filehandle" requires explicit package name at prog.pl line 14.
[Thu Sep 18 00:06:18 2014] prog.pl: Missing right curly or square bracket at prog.pl line 77, at end of line
[Thu Sep 18 00:06:18 2014] prog.pl:   (Might be a runaway multi-line << string starting on line 14)
[Thu Sep 18 00:06:18 2014] prog.pl: prog.pl has too many errors.