“未捕获的语法错误:意外的令牌<”使用 rename() 函数时


"Uncaught SyntaxError: Unexpected token <" when using rename() function

使用PHP,我正在尝试将图片从一个文件夹移动到另一个文件夹。在我的照片处理脚本中,当我使用 rename() 时,我在控制台中收到以下错误消息:

Uncaught SyntaxError: Unexpected token <

例如,我的重命名函数是这样的:

rename("../../uploads/temp/users/15/photo-user-15-2015-01-31-13-19-12.jpeg", "../../uploads/final/users/15/photo-user-15-2015-01-31-13-19-12.jpeg");

我已经将文件夹"temp"和"final"的权限更改为 777,但仍然遇到此问题。

这是我的完整代码:

<?php
/************************************************
 * The Croppic Img Crop To File PHP
 * - goal: cropping the image
 ************************************************/
/* saves cropped image to "temp" folder
* possible GET parameters:
* - subfolder  -->  contains name of group: users, adverts
*/
session_start();
include '../db.php';
include '../functions.php';
// receive image data
$imgUrl = $_POST['imgUrl'];
$imgInitW = $_POST['imgInitW'];
$imgInitH = $_POST['imgInitH'];
$imgW = $_POST['imgW'];
$imgH = $_POST['imgH'];
$imgY1 = $_POST['imgY1'];
$imgX1 = $_POST['imgX1'];
$cropW = $_POST['cropW'];
$cropH = $_POST['cropH'];
// set image quality
$jpeg_quality = 100;
// define output name
$folderUploads = '../../uploads/';
$tempParentDir = $folderUploads . 'temp/' . $_GET['subfolder'] . '/';
$finalParentDir = $folderUploads . 'final/' . $_GET['subfolder'] . '/';
// if user folder does not exist create one
$parentDirWithUserFolder = $tempParentDir . getUserId($db);
if (!is_dir($parentDirWithUserFolder)) {
    // Check if the parent directory is a directory
    if (!is_dir($tempParentDir)) {
        die('Invalid path specified');
    }
    // Check if the parent directory is writeable
    if (!is_writable($tempParentDir)) {
        die('Unable to create directory, permissions denied.');
    }
    // Create the directory
    if (mkdir($parentDirWithUserFolder) === false) {
        die('Problems creating directory.');
    }
}
// make sure only specific types of images get uploaded
$what = getimagesize($imgUrl);
switch (strtolower($what['mime'])) {
    case 'image/png':
        $img_r = imagecreatefrompng($imgUrl);
        $source_image = imagecreatefrompng($imgUrl);
        $type = '.png';
        break;
    case 'image/jpeg':
        $img_r = imagecreatefromjpeg($imgUrl);
        $source_image = imagecreatefromjpeg($imgUrl);
        $type = '.jpeg';
        break;
    case 'image/gif':
        $img_r = imagecreatefromgif($imgUrl);
        $source_image = imagecreatefromgif($imgUrl);
        $type = '.gif';
        break;
    default:
        die('image type not supported');
}
$pathForDb = getUserId($db) . "/photo-user-" . getUserId($db) . "-" . date('Y-m-d-H-i-s');
$output_filename = $tempParentDir . $pathForDb;
$resizedImage = imagecreatetruecolor($imgW, $imgH);
imagecopyresampled($resizedImage, $source_image, 0, 0, 0, 0, $imgW, $imgH, $imgInitW, $imgInitH);
$dest_image = imagecreatetruecolor($cropW, $cropH);
imagecopyresampled($dest_image, $resizedImage, 0, 0, $imgX1, $imgY1, $cropW, $cropH, $cropW, $cropH);
imagejpeg($dest_image, $output_filename . $type, $jpeg_quality);
// move photo file from temp folder to final folder
$sourcePath = $output_filename . $type;
$finalPath = $finalParentDir . $pathForDb . $type;
rename($sourcePath, $finalPath);
$response = array(
    "status" => 'success',
    "url" => $output_filename . $type
);
print json_encode($response);
?>

在没有重命名功能的情况下,此脚本可以完美运行。

以下是文件在"网络"下提供的响应:

<b>Warning</b>:  rename(../../uploads/temp/users/15/photo-user-15-2015-01-31-13-41-26.jpeg,../../uploads/final/users/15/photo-user-15-2015-01-31-13-41-26.jpeg): No such file or directory in <b>/home/www/system/process-image-upload/process-image-save-to-temp.php</b> on line <b>94</b><br />

该文件肯定存在,我在服务器上查找了它。我使用重命名($value 1,$value 2)...

您正在将文件从$tempParentDir移动到$finalParentDir,但您检查源目录是否存在,而不是目标目录。您收到的错误消息意味着目标目录不存在。您需要更改代码,以确保目标目录存在,而不是源目录(源目录始终存在,因为您知道其中有一个文件)。

我认为您只需要更改此设置:

// if user folder does not exist create one
$parentDirWithUserFolder = $tempParentDir . getUserId($db);
if (!is_dir($parentDirWithUserFolder)) {
    // Check if the parent directory is a directory
    if (!is_dir($tempParentDir)) {
        die('Invalid path specified');
    }
    // Check if the parent directory is writeable
    if (!is_writable($tempParentDir)) {
        die('Unable to create directory, permissions denied.');
    }
    // Create the directory
    if (mkdir($parentDirWithUserFolder) === false) {
        die('Problems creating directory.');
    }
}

取代

$parentDirWithUserFolder = $tempParentDir . getUserId($db);

$parentDirWithUserFolder = $finalParentDir . getUserId($db);

您的重命名可能会引发Exception,要么您尝试rename的文件不存在,要么您没有在文件夹中进行操作所需的权限。尝试使用以下代码进行测试:

try {
    rename($sourcePath, $finalPath);
} catch (Exception $e) {
    echo var_dump($e);
}

在给定的请求下查看网络中的错误消息,修复问题并获取测试代码(回显var_dump)。