FileForm.php 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. <?php
  2. /**
  3. * 重庆赤晓店信息科技有限公司
  4. * https://www.chixiaodian.com
  5. * Copyright (c) 2023 赤店商城 All rights reserved.
  6. */
  7. namespace app\modules\admin\models\file;
  8. use Curl\Curl;
  9. use yii\base\Model;
  10. class FileForm extends Model{
  11. /**
  12. * @param URL转换本地绝对路径
  13. * @param string $url 目标地址
  14. * @param addtime 2021年9月1日
  15. */
  16. public function getlocalURL($val)
  17. {
  18. $pathinfos = pathinfo($val);
  19. $tzm = $pathinfos['extension'];
  20. $save_dir = "./web/temp/"; // 服务资源目录
  21. $filename = date('Ymd') . time() . '.' . $tzm; // 自定义名称
  22. # 检测文件大小
  23. $Size = $this->getFileSize($val);
  24. $content_type = $this->file_type_detect($val);
  25. $file_name = str_replace(\Yii::$app->request->hostInfo,\Yii::$app->basePath,$val);
  26. // 超过10M不保存
  27. return [
  28. 'filename'=>$file_name, //图片相对于网站根目录的路径
  29. 'content-type'=>$content_type, //文件类型
  30. 'filelength'=>$Size, //图文大小,
  31. 'name'=>'media'
  32. ];
  33. }
  34. /**
  35. * @param string $target_url 上传目标地址
  36. * @param $file_info
  37. * @return bool|string
  38. */
  39. public function curlUploadFile(string $target_url, $file_info){
  40. $url=$target_url;
  41. $ch1 = curl_init ();
  42. $data = [$file_info['name'] => new \CURLFile($file_info['filename'])];
  43. curl_setopt ( $ch1, CURLOPT_URL, $url );
  44. curl_setopt ( $ch1, CURLOPT_POST, 1 );
  45. curl_setopt ( $ch1, CURLOPT_RETURNTRANSFER, 1 );
  46. curl_setopt ( $ch1, CURLOPT_CONNECTTIMEOUT, 5 );
  47. curl_setopt ( $ch1, CURLOPT_SSL_VERIFYPEER, FALSE );
  48. curl_setopt ( $ch1, CURLOPT_SSL_VERIFYHOST, false );
  49. curl_setopt ( $ch1, CURLOPT_POSTFIELDS, $data );
  50. $result = curl_exec ( $ch1 );
  51. curl_close ( $ch1 );
  52. return $result;
  53. }
  54. /**
  55. * 检测文件大小
  56. * addtime 2021年9月1日
  57. */
  58. public function getFileSize($url)
  59. {
  60. $res = get_headers($url, true);
  61. $filesize = round($res['Content-Length'] , 2); //四舍五入获取文件大小,单位M
  62. return $filesize;
  63. }
  64. public function file_type_detect($srcPath){
  65. $types = array(
  66. 6677 => 'bmp',
  67. 7173 => 'gif',
  68. 7368 => 'mp3',
  69. 13780 => 'png',
  70. 255216 => 'jpg',
  71. );
  72. $curl_obj = new cURL(false);
  73. // $binary = $curl_obj->get($srcPath);
  74. $binary = file_get_contents($srcPath);
  75. $bytes = substr($binary, 0, 2);
  76. $head = @unpack('C2char', $bytes);
  77. $typeCode = intval($head['char1'].$head['char2']);
  78. return $types[$typeCode] ?? $typeCode;
  79. }
  80. }