Исключения не для обработки ошибок, 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 цента так или иначе! :)
file_exists ()
должен использовать путь к файлу на жестком диске, а не URL-адрес. У вас должно получиться что-то вроде:
$thumb_name = $_SERVER['DOCUMENT_ROOT'] . 'images/userphoto/1/2/2/59874a886a0356abc1_thumb9.jpg';
if(file_exists($thumb_name)) {
some_code
}
документы говорят:
Начиная с PHP 5.0.0, эта функция также может использоваться с некоторыми оболочками URL. См. Список поддерживаемых протоколов / оболочек , чтобы узнать, какие обертки поддерживают семейство функций
stat ()
.
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;
}
Включили ли вы параметр, позволяющий использовать внешние URL-адреса? Вы можете установить его в php.ini:
allow_url_fopen = 1
http : //php.net/manual/en/function.file-exists.php
Вы проверяли комментарии ниже?
Я просто читал его части, но, похоже, есть несколько проблем.
Кеширование может быть проблемой. При открытии FTP url всегда возвращает true (говорят в комментариях) ...
Вы должны указать путь к файлу, например "file: /// C: /Documents%20and%20Settings/xyz/Desktop/clip_image001.jpg"
.