/** * Create new file and write into it from file pointer. * Return new file path or false on error. * * @param resource $fp file pointer * @param string $dir target dir path * @param string $name file name * @param array $stat file stat (required by some virtual fs) * @return bool|string * @author Dmitry (dio) Levashov **/ protected function _save($fp, $dir, $name, $stat) { $filename = $this->_joinPath($dir, $name); $mime = $stat['mime']; // @TODO implement a proper system to map a mime-type to a phpcr class if (isset($stat['height']) && $stat['height'] && isset($stat['width']) && $stat['width']) { $file = new Image(); } else { $file = new File(); } // do not pass file pointer directly to prevent it is closed multiple // times causing an error $stream = fopen('php://memory', 'rwb+'); stream_copy_to_stream($fp, $stream); $file->setContentFromStream($stream); $file->setContentType($mime); $file->setId($filename); $this->mediaManager->setDefaults($file, $dir); $this->dm->persist($file); $this->dm->flush(); return $file->getId(); }