fake()에 대해 조사를 진행했습니다.
$ php artisan help @tetsunosuke
개시하다
참고
HTTP Tests
에는 다음과 같은 기술이 있습니다. 파일을 생성하고 테스트를 업로드할 수 있음을 알았습니다.UploadedFile::fake()->image('avatar.jpg', $width, $height)
->size(100);
수요로 삼다
upload_max_filesize
post_max_size
...근데 이게 php야.니 따위.htaccess 설정.
아파치가 아니면 가만히 있을 수도 있어요.
참고하다
<?php
namespace Tests\Feature;
public function testAvatarUpload()
{
Storage::fake('avatars');
// リファレンスから変更 w:200, h:100, size:1000(kB?)
$file = UploadedFile::fake()->image('avatar.jpg', 200, 100)->size(1000);
$response = $this->json('POST', '/avatar', [
'avatar' => $file,
]);
// ...
}
업로드된 이미지 보기
*Controller.php
public function upload(Request $request)
{
// これにより tmp/upload/phpq2D07W のようなファイルができる
$filename = $request->file->move('tmp/upload');
return redirect('/');
}
이렇게
확실히 w:200h:100입니다.
파일 크기 봐봐.
$ wc -c < tmp/upload/phpq2D07W
1055
어?말하기 시작하다
깜깜한 파일로 종횡 사이즈를 결정하는데 파일 크기를 결정할 수 있나요...?
(...메타데이터에 쓸모없는 바이트를 쓰시겠습니까?)
나는 이 파일이 어떻게 Fake를 만드는지 검사했다
이렇게
Illuminate/Http/Testing/File.php /**
* Create a new fake image.
* 略
* @return \Illuminate\Http\Testing\File
*/
public static function image($name, $width = 10, $height = 10)
{
// デフォルトで `$file = UploadedFile::fake()->image('avatar.jpg');`
// したときは 10x10 の画像だった。
return (new FileFactory)->image($name, $width, $height);
}
또 다른 걸 쫓아다니면...
Illuminate/Http/Testing/FileFactory.php /**
* Generate a dummy image of the given width and height.
* 略
*/
protected function generateImage($width, $height, $type)
{
return tap(tmpfile(), function ($temp) use ($width, $height, $type) {
// ...
// 確かに縦横ベースで画像データを作っている!
$image = imagecreatetruecolor($width, $height);
// ...ここでpngにするかjpegにするか変換している処理も
});
}
tap이 뭐야?!
tap(tmpfile(), function () {});
조수 함수!
Illuminate\Support\helpers.phpif (! function_exists('tap')) {
/**
* Call the given Closure with the given value then return the value.
* 略
*/
function tap($value, $callback = null)
{
// 略
}
}
임시 파일의 생성을 알았습니다.size ()는 어떻게 되었습니까?
필요한 HTTP 제목 보기
app/Http/Controllers/HomeController.phppublic function upload(Request $request)
{
// header() 引数なしで呼ぶと全部
// 引数あり、たとえば Content-typeを渡すと
// application/x-www-form-urlencoded とかが取れる
$headers = $request->header();
var_dump($headers);
}
Content-Length도 없고...
array(6) {
'host' =>
array(1) {
[0] =>
string(14) "127.0.0.1:8000"
}
'user-agent' =>
array(1) {
[0] =>
string(7) "Symfony" ← へーそうなんだ!!
}
'accept' =>
array(1) {
[0] =>
string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
'accept-language' =>
array(1) {
[0] =>
string(14) "en-us,en;q=0.5"
}
'accept-charset' =>
array(1) {
[0] =>
string(30) "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
}
'content-type' =>
array(1) {
[0] =>
string(33) "application/x-www-form-urlencoded"
}
}
업로드에 대한 데이터를 봅시다.
tests/Feature/Upload.php $file = UploadedFile::fake()->image('avatar.jpg', 200, 100)->size(1000);
var_dump($file);
class Illuminate\Http\Testing\File#296 (10) {
...
public $sizeToReport => int(1024000)
...
}
파일 크기
$request->file('file') ->getSize()
획득가능.
app/Http/Controllers/HomeController.phppublic function upload(Request $request)
{
// これでアップロードされたファイルサイズに応じた処理ができる
// $_FILES['file']['size']相当
$size = $request->file('file')->getSize();
}
총결산
/**
* Create a new fake image.
* 略
* @return \Illuminate\Http\Testing\File
*/
public static function image($name, $width = 10, $height = 10)
{
// デフォルトで `$file = UploadedFile::fake()->image('avatar.jpg');`
// したときは 10x10 の画像だった。
return (new FileFactory)->image($name, $width, $height);
}
/**
* Generate a dummy image of the given width and height.
* 略
*/
protected function generateImage($width, $height, $type)
{
return tap(tmpfile(), function ($temp) use ($width, $height, $type) {
// ...
// 確かに縦横ベースで画像データを作っている!
$image = imagecreatetruecolor($width, $height);
// ...ここでpngにするかjpegにするか変換している処理も
});
}
tap(tmpfile(), function () {});
if (! function_exists('tap')) {
/**
* Call the given Closure with the given value then return the value.
* 略
*/
function tap($value, $callback = null)
{
// 略
}
}
public function upload(Request $request)
{
// header() 引数なしで呼ぶと全部
// 引数あり、たとえば Content-typeを渡すと
// application/x-www-form-urlencoded とかが取れる
$headers = $request->header();
var_dump($headers);
}
array(6) {
'host' =>
array(1) {
[0] =>
string(14) "127.0.0.1:8000"
}
'user-agent' =>
array(1) {
[0] =>
string(7) "Symfony" ← へーそうなんだ!!
}
'accept' =>
array(1) {
[0] =>
string(63) "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
}
'accept-language' =>
array(1) {
[0] =>
string(14) "en-us,en;q=0.5"
}
'accept-charset' =>
array(1) {
[0] =>
string(30) "ISO-8859-1,utf-8;q=0.7,*;q=0.7"
}
'content-type' =>
array(1) {
[0] =>
string(33) "application/x-www-form-urlencoded"
}
}
$file = UploadedFile::fake()->image('avatar.jpg', 200, 100)->size(1000);
var_dump($file);
class Illuminate\Http\Testing\File#296 (10) {
...
public $sizeToReport => int(1024000)
...
}
public function upload(Request $request)
{
// これでアップロードされたファイルサイズに応じた処理ができる
// $_FILES['file']['size']相当
$size = $request->file('file')->getSize();
}
php.ini
저를 배려하지 못하는 경우도 있는 것 같아요!$ php artisan follow @tetsunosukeito
Reference
이 문제에 관하여(fake()에 대해 조사를 진행했습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tetsunosukeito/items/5a2f05bfe42f435bd886텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)