#php
Вопрос:
я загружаю изображение на сервер и сохраняю путь в базе данных. Теперь я хочу удалить эту запись, а также изображение с этой записью, мой код
$id=$_GET['идентификатор']; $select=mysql_query("выберите изображение из имени таблицы, где question_id='$id'"); $изображение=mysql_fetch_array($выбрать); @разорвать связь($изображение['изображение']); $результат=mysql_query("удалить из имени таблицы, где question_id='$id'");
когда я повторяю $image[‘изображение’]; это даст мне
http://www.example.com/folder/images/image_name.jpeg
Запись успешно удалена, но изображение остается на сервере.
Комментарии:
1. Удалите
@
вызов «Отключить связь», чтобы узнать, не возникнут ли какие-либо ошибки2.
Warning: unlink(): http does not allow unlinking in /var/www/test/delete_table.php on line 11
3. правильно ли расширение? если этого не должно быть
jpg
, или вы можете попробовать использовать путь вместо URL4. вот в чем твоя проблема. Используйте путь к файлу, как предлагает @Oezi
Ответ №1:
Для удаления изображения вам придется использовать путь на вашем сервере, а не URL-адрес.
unlink('/var/www/test/folder/images/image_name.jpeg'); // correct
вам следует удалить @
предыдущее unlink()
, в этом случае вы бы увидели сообщение об ошибке «файл не найден» или что-то в этом роде.
Комментарии:
1. но путь к изображению идет из базы данных, как я уже упоминал в своем вопросе. так как же мне узнать, какое изображение удалено?
2. Начиная с PHP 5.0.0 unlink() также может использоваться с некоторыми оболочками URL. php.net/manual/en/wrappers.php
3. может быть, вам следовало сохранить путь к изображению. другой способ (я никогда этого не сделаю) —
str_replace('http://www.example.com','/var/www/test',$url);
перед тем, как разорвать связь, чтобы получить путь — но вы действительно должны стараться избегать этого-просто сохраните этот путь в файле.4. есть ли способ получить только имя изображения с расширением из URL-адреса.
Ответ №2:
Просто если вы используете folder/images/image_name.jpeg
вместо всего URL-адреса внутри unlink, это будет хорошо работать, например
, unlink(«http://www.example.com/folder/images/image_name.jpeg«);
следует заменить на
unlink("folder/images/image_name.jpeg");
Ответ №3:
вы должны использовать относительный путь для удаления файла с сервера с помощью удаления ссылки. Если вы сохраните абсолютный путь в своей базе данных, сначала вы должны увидеть, из какой папки вы удаляете изображение. поэтому, если вы удалите изображение из «delete.php» это в www.example.com/folder/delete.php чем вам следует заняться чем-то подобным:
$db_path = "http://www.example.com/folder/images/upArrow.png";
$len = strlen("http://www.example.com/folder/");
$new_path = substr($db_path, $len, strlen($db_path)-$len); echo " -> ".$new_path;
if(isset($_POST['Submit'])){
$return = unlink($new_path);
if($return){echo "Succes";}else{echo "Fail";}
}
Ответ №4:
всякий раз, когда вы выбираете свой код в ссылке «Удалить». например: <a href=addproduct.php?action=deleteamp;pid=$get_info[pid]>Delete</a>
затем вы должны проверить условие с помощью текущего элемента выбора.
if(isset($_GET['action']) amp;amp; $_GET['action']=='delete' amp;amp; isset($_GET['pid']))
{
$query1=("select * from tablename where id='".$_GET['id']."'");
$result1=mysql_query($query1);
while($data=mysql_fetch_array($result1))
{
$delete=$data['file'];
unlink("../upload/$delete");
}
$query=("delete from tablename where id='".$_GET['id']."'");
$result=mysql_query($query) or die("not inserted". mysql_error());
if($result==TRUE)
{
$_SESSION['msg']="product successfully deleted";
header("Location:addproduct.php");
exit;
}
else
{
$_SESSION['msg']="error in deleting product";
header("Location:addproduct.php");
exit;
}
}
Ответ №5:
//http://www.example.com/folder/images/image_name.jpeg
define("BASE_URL", DIRECTORY_SEPARATOR . "folder" . DIRECTORY_SEPARATOR);
define("ROOT_PATH", $_SERVER['DOCUMENT_ROOT'] . BASE_URL);
$folder_upload = "images/";
$image_delete = ROOT_PATH . $folder_upload . pathinfo($image['image'], PATHINFO_BASENAME);
if (!empty($image['image'])) {
/* Delete */
if (unlink($image_delete)) {
echo "<b>{$image_delete}</b> has been deleted";
} else {
echo "<b>{$image_delete}</b> error deleting ";
}
} else {
echo "File image not exist";
}
// http://localhost/folder/images/image_name.jpeg