Symfony2:如何将文件从tmp目录移动到definitve位置

时间:2015-07-26 17:16:28

标签: php symfony

我正在使用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)。

0 个答案:

没有答案