我在带有cakephp3的windows上使用php-ffmpeg,遇到了一个问题:
无法探测/var/www/blogchild.dev/webroot/uploads/records//Танецдовольноготеннисиста.mp4
MultimediaController
<?php
namespace App\Controller;
use App\Controller\AppController;
class MultimediaController extends AppController
{
public function initialize()
{
parent::initialize(); // TODO: Change the autogenerated stub
$this->Auth->allow(['index', 'addvideo']);
$this->loadModel('Posts');
$this->loadComponent('File');
$this->loadComponent('Flash');
$this->loadComponent('Upload');
}
public function addvideo()
{
$this->viewBuilder()->template('addvideo');
$posts = $this->Posts->newEntity();
// $posts = $this->MsPosts->find()->toArray();
// dump($posts);
// die();
if ($this->request->is('post')) {
$data = $this->request->data;
$data['mentor_id'] = '1';
$data['nbr_of_views'] = '0';
$data['nbr_of_loves'] = '0';
$data['nbr_of_smiles'] = '0';
$data['mentor_id'] = '1';
$data['child_id'] = '1';
$post = $this->Posts->patchEntity($posts, $data);
// var_dump($data);
// die();
// debug($this->MsPosts->save($post));die();
// $upload = $this->File->uploadFile($this->request->data['file'], $post['id']);
// $post->file = $upload['url'];
if (!empty($this->request->data['file']['name'])) {
$path = '/uploads' . DS . 'records' . DS . $post->id;
$this->uploadFile($_FILES['file'], $path, $post->id);
$post->file = $path . DS . $_FILES['file']['name'];
$this->Posts->save($post);
} else {
$this->Posts->save($post);
}
$this->Flash->success(__('The post saved'));
return $this->redirect(['action' => 'addvideo']);
AppController的
<?php
/**
* CakePHP(tm) : Rapid Development Framework (http://cakephp.org)
* Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
*
* Licensed under The MIT License
* For full copyright and license information, please see the LICENSE.txt
* Redistributions of files must retain the above copyright notice.
*
* @copyright Copyright (c) Cake Software Foundation, Inc. (http://cakefoundation.org)
* @link http://cakephp.org CakePHP(tm) Project
* @since 0.2.9
* @license http://www.opensource.org/licenses/mit-license.php MIT License
*/
namespace App\Controller;
use Cake\Controller\Controller;
use Cake\Event\Event;
use Cake\Filesystem\Folder;
use FFMpeg\Coordinate\TimeCode;
use FFMpeg\FFMpeg;
use Cake\Controller\Component;
use Cake\I18n\I18n;
/**
* Application Controller
*
* Add your application-wide methods in the class below, your controllers
* will inherit them.
*
* @link http://book.cakephp.org/3.0/en/controllers.html#the-app-controller
*/
class AppController extends Controller
{
/**
* Initialization hook method.
*
* Use this method to add common initialization code like loading components.
*
* e.g. `$this->loadComponent('Security');`
*
* @return void
*/
public function initialize()
{
parent::initialize();
$this->loadComponent('Cookie');
$this->loadComponent('RequestHandler');
$this->loadComponent('Flash');
$provider = $this->request->query('provider');
//if ($provider === null) {
$this->loadComponent('Auth', [
'authenticate' => [
'Form' => [
'finder' => 'auth',
'fields' => [
'username' => 'email',
'password' => 'password'
],
'loginAction' => [
'controller' => 'Auth',
'action' => 'login'
],
'loginRedirect' => [
'controller' => 'Auth',
'action' => 'login'
],
'logoutRedirect' => [
'controller' => 'Auth',
'action' => 'login'
]
],
'ADmad/HybridAuth.HybridAuth' => [
// All keys shown below are defaults
'fields' => [
'provider' => 'provider',
'openid_identifier' => 'openid_identifier',
'email' => 'email'
],
'profileModel' => 'ADmad/HybridAuth.SocialProfiles',
'profileModelFkField' => 'user_id',
// The URL Hybridauth lib should redirect to after authentication.
// If no value is specified you are redirect to this plugin's
// HybridAuthController::authenticated() which handles persisting
// user info to AuthComponent and redirection.
'hauth_return_to' => null,
'loginRedirect' => [
'controller' => 'Auth',
'action' => 'login'
],
'logoutRedirect' => [
'controller' => 'Auth',
'action' => 'login'
]
],
],
]);
// } else {
// $this->loadComponent('Auth', [
// 'authenticate' => [
// 'Form',
//
//
// ]
//
// ]);
// }
}
/**
* Before render callback.
*
* @param \Cake\Event\Event $event The beforeRender event.
* @return void
*/
public function beforeRender(Event $event)
{
if (!array_key_exists('_serialize', $this->viewVars) &&
in_array($this->response->type(), ['application/json', 'application/xml'])
) {
$this->set('_serialize', true);
}
if ($this->request->session()->read('Auth.User')) {
$this->set('loggedIn', true);
} else {
$this->set('loggedIn', false);
}
}
protected function uploadFile(array $file, $path, $postId)
{
$objFile = $file;
$path = $_SERVER['DOCUMENT_ROOT'] . $path;
//@TODO check file size|Return error
$folder = new Folder();
$folder->create($path, 0755);
move_uploaded_file($objFile['tmp_name'], $path . DS . $objFile['name']);
$ffmpeg = FFMpeg::create(
array(
'ffmpeg.binaries' => '/usr/bin/ffmpeg',
'ffprobe.binaries' => '/usr/bin/ffprobe',
'timeout' => 3600, // The timeout for the underlying process
'ffmpeg.threads' => 12, // The number of threads that FFMpeg should use
)
);
$temp = explode('.', $objFile['name']);
$video = $ffmpeg->open(WWW_ROOT . 'uploads/records' . DS . $postId . DS . $objFile['name']);
$frame = $video->frame(TimeCode::fromSeconds(1));
$userPath = 'uploads/records' . DS . $postId . DS . $temp[0] . '.jpg';
$frame->save(WWW_ROOT . $userPath);
}
警告!!!!!帮我...... enter image description here
答案 0 :(得分:1)
您需要确保您尝试上传的文件部分具有正确的权限
即ubuntu sudo chmod -R 777 your-dir-name