2013-08-20 5 views
2

Я пытаюсь получить дату и время последней модификации некоторых файлов, используя filemtime. К сожалению, это не работает для всех моих файлов. Я попытался использовать полный полный путь (например, www.mysite.com/images/file.png). Я попытался использовать расширение (например, /images/file.png), а также просто имя файла (file.png). Ничего не работает. Как передать ссылку на путь, чтобы он мог найти мои файлы? Благодаря!filemtime не находит файлы

<br />n<b>Warning</b>: filemtime() [<a href='function.filemtime'>function.filemtime</a>]: stat failed for www.mysite.com/images/hills.png in <b>D:\Hosting\11347607\html\mobile\updateImages.php</b> on line <b>20</b><br 

Это PHP скрипт:

<?php 

    include '../scripts/connection.php'; 

    //get information on this location from the database 
    $sql = "SELECT * FROM types"; 
    $result = mysql_query($sql); 

    $array = array(); 
    while ($row = mysql_fetch_array($result)) { 
     $path = $row['path'] . $row['picture_url']; 
     $last_mod = filemtime($path); 
     $this_file = array(
      'filename' => $row['picture_url'], 
      'last_mod' => $last_mod 
     ); 
     $array[$row['type']] = $this_file; 
    } 

    echo json_encode(array('result'=>'success', 'message'=>$array)); 
?> 
+0

Рекомендуется использовать абсолютный путь в качестве базы, так что вы всегда уверены, что имя канонического файла - это то, что вы ожидаете от него. –

+0

Итак, вы проверили, что такое '$ path', прежде чем вы вызовете filemtime()? вы проверяли, действительно ли этот путь существует из чего-то другого, кроме PHP? Если он существует, тогда проверьте, работает ли какой-либо пользовательский PHP-скрипт, который пишет, для доступа к этому дереву каталогов + файла. –

+0

Я попробовал это первым, но получил тот же результат. Я собираюсь изменить свое сообщение, чтобы показать сообщение об ошибке при использовании этого подхода. – Alex

ответ

4

Относительные пути разрешают базу на current working directory запроса. Это изменится с запроса на запрос в зависимости от того, какой файл php первоначально получил запрос. Что вам нужно сделать, так это сделать это абсолютным путем.

Существует несколько методов, которые вы можете использовать для этого. Магическая константа __DIR__ является одной из наиболее полезных, но для вашей проблемы, так как вы знаете, какой путь она относительно корня документа вы можете сделать.

$last_mod = filemtime($_SERVER["DOCUMENT_ROOT"]."/images/file.png"); 

Это использует корень документа вашего веб-сервера, чтобы дать вам отправную точку, чтобы разрешить свой путь против (файловой системы пути equivelent к http://mysite.com URL).

__DIR__ полезно, если вы хотите разрешить путь относительно пути, что константа __DIR__ используется в. В более ранних версиях PHP вы можете использовать dirname(__FILE__), чтобы получить то же самое значение.

+0

Также необходимо было повернуть косые черты (от/до \). Благодаря! – Alex

1

$path Ваш URL-адрес? www.mysite.com/images/hills.png? это должен быть файл вместо URL. http://php.net/manual/en/function.filemtime.php

+0

Да, это URL. Мне нужно сравнить версию файла, который у меня есть на моем телефоне Android с версией, хранящейся на сервере. Если версия сервера более новая, я перезагружаю ее. Мне не обязательно, какая версия файла хранится на моем диске, до тех пор, пока я не загружу его на сервер. Это версия сервера, которую я использую в качестве основной версии. – Alex

+0

Извините, но вы не можете найти измененное время файлов на сервере через 'filemtime' – Jigar

+0

Если у вас есть контроль над сервером, вы можете создать веб-службу, чтобы вернуть последнее измененное время запрошенного файла. – Orangepill

0

Easy Solution

Проблема связана с плохим путем, но часто, что запускается из-за кэш сайта.

Итак, простым решением является удаление кеша, затем на вашем сервере будет создан плохой базовый путь.

По моему опыту, у меня была проблема с кешем symfony 2. И легким быстрым решением было удалить каталог приложения/кеша.

кд WWW/приложение/кэш гт -Fr *

Затем кэш получил новый истинный BasePath.

 Смежные вопросы

  • Нет связанных вопросов^_^