外部ファイルからtmpフォルダにファイルをアップロードしています(ユーザーの投稿要求ではなく)。$ _FILESにそのファイルの情報を入力し、$ _FILES変数を使用するコードに渡します。 しかし、そのコードの中では、is_uploaded_fileチェックを持つmove_uploaded_fileを使用しています。 POSTを使用してアップロードされなかったため、コードによって手動でアップロードされたファイル(ユーザーフォームではなく)がこのチェックに失敗します。その小切手に合格することはできますか?失敗PHPでis_uploaded_fileチェックを渡すには?
コード:$modx-> runProcessor('browser/file/upload'...
コードインサイド
//$url contains url of image from another site
function upload_from_url($url)
{
global $modx;
// we load temporary file to /tmp and then add it to $_FILES
$img = '/tmp/'.uniqid("", true); // no extension here since we can't trust it
$res = file_put_contents($img, file_get_contents($url)); // UPLOAD is made here, it works
$mimeType = mime_content_type($img);
$allowedMimeTypes = ["image/jpeg","image/gif","image/png"];
if (!in_array($mimeType, $allowedMimeTypes))
{
logError("!!!ATTENTION!!! got file $img with forbidden mime type $mimeType");
throw new RuntimeException("Forbidden file mime type!");
die; // just to be sure; shouldn't get here
}
$_FILES['file']['name'] = uniqid("img", true)."."
.(explode("/", $mimeType)[1]); // get jpg part of image/jpg
$_FILES['file']['type'] = $mimeType;
$_FILES['file']['tmp_name'] = $img;
$_FILES['file']['error'] = 0; // = UPLOAD_ERR_OK
$_FILES['file']['size'] = filesize($img);
$response = $modx-> runProcessor('browser/file/upload', ['path' => 'assets/images']); // <= here it fails
}
、失敗した部分があります:
if (!move_uploaded_file($file['tmp_name'],$newPath)) {
$this->addError('path',$this->xpdo->lexicon('file_err_upload'));
continue;
}
それは$ _FILES変数から$ファイルから$ファイルを取得し、私はしたくありませんそれを回避するためにフレームワークコードを修正する。
悲しいです..「あなたは、まだ名前の変更を経て、以前にアップロードされたファイルを移動することができます。」 - できません - フレームワークコードを使用する必要があります。なぜならアップロード中に失うことのないイベントを生成するからです – maxpovver