PHPファイル管理システム
-
21-08-2019 - |
質問
を作っていく必要があるファイルの管理インタフェースを統合し、お客様の現在のウェブサイトの構築cakephp.
ファイルの管理者のユーザーのファイルもアクセス権です。
ユーザがアップロードファイルのサイズ)他のユーザーをダウンロードファイルの場合はアクセス権を許可).
この問題はない多くのファイル管理システムを購入しないで見の統合により現在ログインします。のクライアントだけしたいユーザーのログイン後にアクセスをユーザがCPおよびそのファイルです。で調査を実施しているのは、同じで私たちだけのオプションの構築をファイルの管理インタフェース。
このオプションを許可する作用PHP?私は理解している必要がありますの増加はphpアップロード制限がある天井がphp/apacheできる?
ファイルがキャップで約150MB場合があるが場合があり、ファイルサイズは大きくなることが示されている。
ものではないと思要書類のファイルのアップロード/制御、Linuxサーバ?
思いが現実の具体的な質問にもう一助に一部の典型的な落とし穴を実施します。
解決
ファイル管理が簡単にエフェクト)を付けています。ここにある時点での正しい方向を向いている。
まず、場合には、負荷バランスのウェブサーバの状況をする必要がありまステップの複雑さを少しするためのファイルを一つにします。その場合、pingっそもそもの私の回答をお送りさせていただき当社の超軽量ファイルサーバ/クライアントで使用することと同じ状況です。
がいくつかの変数または影響により大きなんでいます。私の使用はお勧めのapacheディレクティブに制限はこのような変更を特定のファイル:
<Directory /home/deploy/project/uploader>
php_value max_upload_size "200M"
php_value post_max_size "200M"
php_value max_input_time "1800"
# this one depends on how much processing you are doing to the file
php_value memory_limit "32M"
</Directory>
建築
データベースの作成テーブル店舗についての情報を各ファイルです。
CREATE TABLE `File` (
`File_MNID` int(10) unsigned NOT NULL AUTO_INCREMENT,
`Owner_Field` enum('User.User_ID', 'Resource.Resource_ID') NOT NULL,
`Owner_Key` int(10) unsigned NOT NULL,
`ContentType` varchar(64) NOT NULL,
`Size` int(10) NOT NULL,
`Hash` varchar(40) NOT NULL,
`Name` varchar(128) NOT NULL,
PRIMARY KEY (`File_MNID`),
KEY `Owner` (`Owner_Field`,`Owner_Key`)
) ENGINE=InnoDB
何 Owner_Field
や Owner_Key
?簡単に言う"実体"を所有してファイルです。この特定の場合であった複数の種類のファイルがアップしました。このケースでは、簡単な User_ID
分野が十分です。
目的で保存オーナーのように制限することができたのでダウンロードするファイルです。ることがきわめて重要であることが保護のためのダウンロード
ここではサンプルクラス 利用できる受け入れのファイルかジーンズのブランド、、、。必要な変更に合わせてのコースです。
がいくつかについての注意次のコードです。これはアプリケーションサーバ、ファイルサーバでは、いくつかのものに置き換える"".
- 他の発生
App::CallAPI(...)
必要なものを交換するクエリーや設定の問いに"同じのがある。 - 他の発生
App::$FS->...
ット環境を提供していきますと、正しいファイルの取り扱い機能PHPなどのmove_uploaded_file
,readfile
, など---。
お久しぶりです、どらすこです。だがこの機能を確認するファイル所有の指定されたユーザー、ファイルの削除などです。以上の説明の...
<?php
class FileClient
{
public static $DENY = '/\.ade$|\.adp$|\.asp$|\.bas$|\.bat$|\.chm$|\.cmd$|\.com$|\.cpl$|\.crt$|\.exe$|\.hlp$|\.hta$|\.inf$|\.ins$|\.isp$|\.its$| \.js$|\.jse$|\.lnk$|\.mda$|\.mdb$|\.mde$|\.mdt,\. mdw$|\.mdz$|\.msc$|\.msi$|\.msp$|\.mst$|\.pcd$|\.pif$|\.reg$|\.scr$|\.sct$|\.shs$|\.tmp$|\.url$|\.vb$|\.vbe$|\.vbs$|vsmacros$|\.vss$|\.vst$|\.vsw$|\.ws$|\.wsc$|\.wsf$|\.wsh$/i';
public static $MAX_SIZE = 5000000;
public static function SelectList($Owner_Field, $Owner_Key)
{
$tmp = App::CallAPI
(
'File.List',
array
(
'Owner_Field' => $Owner_Field,
'Owner_Key' => $Owner_Key,
)
);
return $tmp['Result'];
}
public static function HandleUpload($Owner_Field, $Owner_Key, $FieldName)
{
$aError = array();
if(! isset($_FILES[$FieldName]))
return false;
elseif(! is_array($_FILES[$FieldName]))
return false;
elseif(! $_FILES[$FieldName]['tmp_name'])
return false;
elseif($_FILES[$FieldName]['error'])
return array('An unknown upload error has occured.');
$sPath = $_FILES[$FieldName]['tmp_name'];
$sHash = sha1_file($sPath);
$sType = $_FILES[$FieldName]['type'];
$nSize = (int) $_FILES[$FieldName]['size'];
$sName = $_FILES[$FieldName]['name'];
if(preg_match(self::$DENY, $sName))
{
$aError[] = "File type not allowed for security reasons. If this file must be attached, please add it to a .zip file first...";
}
if($nSize > self::$MAX_SIZE)
{
$aError[] = 'File too large at $nSize bytes.';
}
// Any errors? Bail out.
if($aError)
{
return $aError;
}
$File = App::CallAPI
(
'File.Insert',
array
(
'Owner_Field' => $Owner_Field,
'Owner_Key' => $Owner_Key,
'ContentType' => $sType,
'Size' => $nSize,
'Hash' => $sHash,
'Name' => $sName,
)
);
App::InitFS();
App::$FS->PutFile("File_" . $File['File_MNID'], $sPath);
return $File['File_MNID'];
}
public static function Serve($Owner_Field, $Owner_Key, $File_MNID)
{
//Also returns the name, content-type, and ledger_MNID
$File = App::CallAPI
(
'File.Select',
array
(
'Owner_Field' => $Owner_Field,
'Owner_Key' => $Owner_Key,
'File_MNID' => $File_MNID
)
);
$Name = 'File_' . $File['File_MNID'] ;
//Content Header for that given file
header('Content-disposition: attachment; filename="' . $File['Name'] . '"');
header("Content-type:'" . $File['ContentType'] . "'");
App::InitFS();
#TODO
echo App::$FS->GetString($Name);
}
public static function Delete($Owner_Field, $Owner_Key, $File_MNID)
{
$tmp = App::CallAPI
(
'File.Delete',
array
(
'Owner_Field' => $Owner_Field,
'Owner_Key' => $Owner_Key,
'File_MNID' => $File_MNID,
)
);
App::InitFS();
App::$FS->DelFile("File_" . $File_MNID);
}
public static function DeleteAll($Owner_Field, $Owner_Key)
{
foreach(self::SelectList($Owner_Field, $Owner_Key) as $aRow)
{
self::Delete($Owner_Field, $Owner_Key, $aRow['File_MNID']);
}
}
}
注記:
ご注意くださいこのクラスは実施します。では、呼び出し側が認証されたOwner_FieldとOwner_Keyを呼び出す前に、 FileClient::Serve(...)
など---。
奥高尾にひっそりと建つ料亭。遅用する場合にはこのはないので、お持ちいただくだけコメントとなります。大夜、ということである。
PS.のユーザインタフェースで簡単にテーブルやファイルのアップロード分野です。やしてしまう可能性もあります。足利フラッシュアップローダー...
他のヒント
私のおすすめのコミュニティに寄与したものCakePHPコードの例:
ここでは良い選択です。それはあなたがPCクライアントと単一ファイルのPHPサーバーをインストールする必要があり。しかし、それは速く走る!