我正在使用Mac,而我正在尝试在PHP tmp目录中创建一个图像,然后将其移动到最终位置。
这是我使用的代码:
public function download()
{
// Get the remote file extension
$remoteImageExtension = explode('.', $this->getRemoteUri()->getPath());
$remoteImageExtension = array_pop($remoteImageExtension);
$fs = new Filesystem();
$tempImage = tempnam(sys_get_temp_dir(), 'image.') . '.' . $remoteImageExtension;
/** @todo: Refact: Pass this as constructor parameter so it will be possible to unit test it */
$client = new Client();
// Get and save file
$client->get($this->getRemoteUri(), ['save_to' => $tempImage]);
$tempImage = new File($tempImage);
try {
if ($fs->exists($tempImage))
{
die('Temporary file exists');
$fs->copy($tempImage, $this->getDownloadRootDir() . $this->getName() . '.' . $remoteImageExtension);
} else {
die('Temporary file doesn\'t exist');
}
} catch (\Exception $e)
{
die($e->getMessage());
}
// die(print_r($tempImage));
// Move the file to its definitive location
//die($this->getDownloadRootDir() . ' | ' . $this->getName());
/*try {
$tempImage->move(
$this->getDownloadRootDir(),
$this->getName() . '.' . $remoteImageExtension
);
} catch (FileException $e)
{
echo $e->getMessage();
}*/
// set the path property to the filename where you've saved the file
$this->path = $this->getName();
}
正如您所看到的,我在代码中放了一些die()
来在执行过程中打印一些信息。
这样做,我知道临时文件已正确创建,但它没有移动到新位置。
我已经读到这可能是目标文件夹上的权限问题,但是,更改它们会返回一个关于非法用户的错误(我在Mac上!):
$ chown -R www-data /Users/Aerendir/Documents/JooServer/_Projects/path/to/symfony_project/web/images/path/to/destination_folder
chown: www-data: illegal user name
我已经尝试了Filesystem::copy()
和File::move()
方法(正如您从提供的源代码中看到的那样),但文件未被移动。
关于如何解决这个问题的任何想法?
UPDATE 试图了解which is my current Apache user我发现它已正确设置为我的主系统用户(Aerendir)。