|
Server : Apache/2.4.62 System : FreeBSD fbsdweb2.web.rcn.net 14.1-RELEASE FreeBSD 14.1-RELEASE releng/14.1-n267679-10e31f0946d8 GENERIC amd64 User : www ( 80) PHP Version : 8.3.8 Disable Function : NONE Directory : /domains/fatshado/cgi-bin/MT/lib/MT/FileMgr/ |
Upload File : |
# Copyright 2001, 2002 Benjamin Trott. This code cannot be redistributed without
# permission from www.movabletype.org.
#
# $Id: Local.pm,v 1.12 2002/09/22 02:10:48 btrott Exp $
package MT::FileMgr::Local;
use strict;
use MT::FileMgr;
@MT::FileMgr::Local::ISA = qw( MT::FileMgr );
use Symbol;
use Fcntl qw( :DEFAULT :flock );
sub get_data {
my $fmgr = shift;
my($from, $type) = @_;
my($fh);
if (!$fmgr->is_handle($from)) {
$fh = gensym();
open $fh, $from
or return $fmgr->error(MT->translate(
"Opening local file '[_1]' failed: [_2]", $from, "$!" ));
} else {
$fh = $from;
}
if ($type && $type eq 'upload') {
binmode($fh);
}
my($data);
{ local $/; $data = <$fh>; }
close $fh if !$fmgr->is_handle($from);
$data;
}
## $type is either 'upload' or 'output'
sub put {
my $fmgr = shift;
my($from, $to, $type) = @_;
my $rv;
if (!$fmgr->is_handle($from)) {
my $fh = gensym();
open $fh, $from
or return $fmgr->error(MT->translate(
"Opening local file '[_1]' failed: [_2]", $from, "$!"));
$rv = _write_file($fmgr, $fh, $to, $type);
close $fh;
} else {
$rv = _write_file($fmgr, $from, $to, $type);
}
$rv;
}
*put_data = \&_write_file;
sub _write_file {
my $fmgr = shift;
my($from, $to, $type) = @_;
local *FH;
my($umask, $perms);
my $cfg = $fmgr->{cfg};
if ($type && $type eq 'upload') {
$umask = $cfg->UploadUmask;
$perms = $cfg->UploadPerms;
} else {
$umask = $cfg->HTMLUmask;
$perms = $cfg->HTMLPerms;
}
my $old = umask(oct $umask);
sysopen FH, $to, O_RDWR|O_CREAT|O_TRUNC, oct $perms
or return $fmgr->error(MT->translate(
"Opening local file '[_1]' failed: [_2]", $to, "$!"));
if ($type && $type eq 'upload') {
binmode(FH);
binmode($from) if $fmgr->is_handle($from);
}
## Lock file unless NoLocking specified.
flock FH, LOCK_EX unless $fmgr->{cfg}->NoLocking;
seek FH, 0, 0;
truncate FH, 0;
my $bytes = 0;
if ($fmgr->is_handle($from)) {
while (my $len = read $from, my($block), 8192) {
print FH $block;
$bytes += $len;
}
} else {
print FH $from;
$bytes = length($from);
}
close FH;
umask($old);
$bytes;
}
sub exists { -e $_[1] }
sub mkpath {
my $fmgr = shift;
my($path) = @_;
require File::Path;
my $umask = oct $fmgr->{cfg}->DirUmask;
my $old = umask($umask);
File::Path::mkpath([$path], 0, 0777);
umask($old);
1;
}
sub rename {
my $fmgr = shift;
my($from, $to) = @_;
rename $from, $to
or return $fmgr->error(MT->translate(
"Renaming '[_1]' to '[_2]' failed: [_3]", $from, $to, "$!"));
1;
}
1;