file_exists PHP () не будет работать на меня?

Исключения не для обработки ошибок, IMO. Исключения - просто это; исключительные события, которые Вы не ожидали. Используйте с осторожностью, я говорю.

Коды ошибок могут быть в порядке, но возврат 404 или 200 из метода плох, IMO. Используйте перечисления (.NET) вместо этого, который делает код более читаемым и легче использовать для других разработчиков. Также Вы не должны поддерживать таблицу по числам и описаниям.

Также; try-catch-finally шаблон является антишаблоном в моей книге. Попытка наконец может быть хорошей, выгода попытки может также быть хорошей, но try-catch-finally никогда не хорош. попытка наконец часто может времена быть замененной оператором "использования" (шаблон IDispose), который является лучшим IMO. И выгода Попытки, где Вы на самом деле ловите исключение, Вы можете обработать, хорошо, или если Вы делаете это:

try{
    db.UpdateAll(somevalue);
}
catch (Exception ex) {
    logger.Exception(ex, "UpdateAll method failed");
    throw;
}

Поэтому, пока Вы позволяете исключению продолжить пузыриться, оно в порядке. Другой пример - это:

try{
    dbHasBeenUpdated = db.UpdateAll(somevalue); // true/false
}
catch (ConnectionException ex) {
    logger.Exception(ex, "Connection failed");
    dbHasBeenUpdated = false;
}

Здесь я на самом деле обрабатываю исключение; то, что я делаю за пределами выгоды попытки, когда метод обновления перестал работать, является другой историей, но я думаю, что мое мнение было высказано. :)

, Почему затем try-catch-finally антишаблон? Вот то, почему:

try{
    db.UpdateAll(somevalue);
}
catch (Exception ex) {
    logger.Exception(ex, "UpdateAll method failed");
    throw;
}
finally {
    db.Close();
}

, Что происходит, если объект дб был уже закрыт? Новое исключение выдается, и оно должно быть обработано! Это лучше:

try{
    using(IDatabase db = DatabaseFactory.CreateDatabase()) {
        db.UpdateAll(somevalue);
    }
}
catch (Exception ex) {
    logger.Exception(ex, "UpdateAll method failed");
    throw;
}

Или, если объект дб не реализует IDisposable, делают это:

try{
    try {
        IDatabase db = DatabaseFactory.CreateDatabase();
        db.UpdateAll(somevalue);
    }
    finally{
        db.Close();
    }
}
catch (DatabaseAlreadyClosedException dbClosedEx) {
    logger.Exception(dbClosedEx, "Database connection was closed already.");
}
catch (Exception ex) {
    logger.Exception(ex, "UpdateAll method failed");
    throw;
}

Это составляет мои 2 цента так или иначе! :)

34
задан JasonDavis 17 August 2009 в 13:01
поделиться

6 ответов

file_exists () должен использовать путь к файлу на жестком диске, а не URL-адрес. У вас должно получиться что-то вроде:

$thumb_name = $_SERVER['DOCUMENT_ROOT'] . 'images/userphoto/1/2/2/59874a886a0356abc1_thumb9.jpg';
if(file_exists($thumb_name)) {
    some_code
}

http://us2.php.net/file_exists

83
ответ дан 27 November 2019 в 16:08
поделиться

документы говорят:

Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми оболочками URL. См. Список поддерживаемых протоколов / оболочек , чтобы узнать, какие обертки поддерживают семейство функций stat () .

10
ответ дан 27 November 2019 в 16:08
поделиться

file_exists работает только в локальной файловой системе.

] Так что попробуйте это, если вы используете localhost :

$thumb_name = 'images/userphoto/1/2/2/59874a886a0356abc1_thumb9.jpg';
if (file_exists($_SERVER['DOCUMENT_ROOT'].$thumb_name)) {
    $img_name = SITE_PATH2.$thumb_name;
} else {
    $img_name = $noimg;
}
6
ответ дан 27 November 2019 в 16:08
поделиться

Включили ли вы параметр, позволяющий использовать внешние URL-адреса? Вы можете установить его в php.ini:

allow_url_fopen = 1
1
ответ дан 27 November 2019 в 16:08
поделиться

http : //php.net/manual/en/function.file-exists.php

Вы проверяли комментарии ниже?

Я просто читал его части, но, похоже, есть несколько проблем.

Кеширование может быть проблемой. При открытии FTP url всегда возвращает true (говорят в комментариях) ...

0
ответ дан 27 November 2019 в 16:08
поделиться

Вы должны указать путь к файлу, например "file: /// C: /Documents%20and%20Settings/xyz/Desktop/clip_image001.jpg" .

0
ответ дан 27 November 2019 в 16:08
поделиться
Другие вопросы по тегам:

Похожие вопросы: