2015-10-03 3 views
0

Я пытаюсь переименовать дубликат имени файла при загрузке нового файла с тем же именем. Все работает прекрасно, за исключением, что я получаю сообщение об ошибке:PHP rename() не работает

<b>Warning</b>: rename(./uploads/484360_438365932885330_1444746206_n.jpeg,): No such file or directory in <b>/home/unisharesadmin/public_html/wp-content/themes/blankslate/check_duplicate_img.php</b> on line <b>36</b><br /> 

Несмотря на подтверждение того, что каталог существует и что файл и каталог оба записываемые, PHP по-прежнему бросает эту ошибку. Я уже консультировался с бесчисленными потоками, и ни один из них, похоже, не помогает, поскольку я не могу найти какой-либо путь или строчную ошибку в моем пути к файлу.

Благодарим за помощь, которую вы можете предоставить!

Приветствия Colin

Код:

<? 
require_once('../../../wp-config.php'); 

function RandomString($length = 10) { 
    $characters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    $charactersLength = strlen($characters); 
    $randomString = ''; 
    for ($i = 0; $i < $length; $i++) { 
     $randomString .= $characters[rand(0, $charactersLength - 1)]; 
    } 
    return $randomString; 
} 

$this_img = $_REQUEST['filename']; 

$path = './uploads/' . $this_img; 

$img_array = explode(".", $this_img); 

$new_img = RandomString() . '.' . $img_array[sizeof($img_array)-1]; 

$new_path = './uploads/' . $new_img; 

if (file_exists($path)) 
{ 
    query_posts('posts_per_page=-1'); 

    while(have_posts()) 
    { 
     the_post(); 

     if(strpos(get_post_meta(get_the_id(), 'imgurl1')[0], $this_img) !== false) 
     { 
     //echo "this posts url1 matches, so update the existing files name and the posts refrence to it"; 
     echo is_writeable("./uploads"); 
     rename($path, $newpath); 
     //echo update_post_meta(get_the_id(), 'imgurl1', get_template_directory_uri() . '/uploads/' . $new_img); 

     } 
     else if(strpos(get_post_meta(get_the_id(), 'imgurl2')[0], $this_img) !== false) //this posts url2 matches 
     { 
     echo "this posts url2 matches, so update the existing files name and the posts refrence to it"; 

     //rename($path, $newpath); 
     //echo update_post_meta(get_the_id(), 'imgurl2', get_template_directory_uri() . '/uploads/' . $new_img); 

     } 

    } 
} 
else 
{ 
echo 0; 
} 

?> 
+0

Итак, где еда? Я имею в виду код? – user5173426

+0

@HawasKaPujaari просто пришлось быстро переформатировать код. См. Мой обновленный вопрос – colinmcp

ответ

2

1 - rename функция требует, по крайней мере, два аргументы. Кажется, что вы предоставляете только one.

2 - Кроме того, вы можете использовать полный путь, а именно:

$path = '/full/path/to/uploads'; 
$new_path = '/full/path/to/uploads'; 
rename("$path/484360_438365932885330_1444746206_n.jpeg", "$new_path/newfile.jpeg"); 

3 - Убедитесь, что $new_img установлен, ваша проблема может быть здесь:

$new_img = RandomString() . '.' . $img_array[sizeof($img_array)-1]; 

4 - Try установив временную hardcored, оцененную как $new_img, и посмотрите, работает ли она, если это так, ваша ошибка есть.

$new_img = "tempfile.jpeg"; 

TIP: Добавить отчеты об ошибках в верхней части файла (ов) сразу после открытия PHP тег, например <?php error_reporting(E_ALL); ini_set('display_errors', 1); затем остальной части кода, чтобы увидеть, если он дает что-нибудь. Удалить в производство.

+0

Да, но ошибка не показывает этого, поэтому проблема должна быть связана с '$ new_img' –

+0

Я ожидаю, что ему нужно использовать полный путь. Я проверил его другие коды, и все в порядке. Его расположение файла php равно */home/unisharesadmin/public_html/wp-content/themes/blankslate/check_duplicate_img.php *. @Pedro –

+0

@PedroLobito Привет, спасибо за ваш комментарий. Во-первых, я поставляю два аргумента, поскольку $ path и $ newpath являются строками. Во-вторых, я пробовал использовать полный путь безрезультатно. Я попытался использовать как путь URL, так и путь к серверу. В-третьих, $ newpath не будет существовать до тех пор, пока переименование не произойдет, так как это новое имя файла. Наконец, добавление жестко заданного значения также не работает. – colinmcp