PDA

View Full Version : حذف با دستور unlink (حل شد)



masiha68
یک شنبه 20 اسفند 1391, 00:01 صبح
من با کد زیر


$lop=$_GET['fileid'];

mysql_select_db($database_pop, $pop);
$query_showfile = "SELECT * FROM up where fileid=$lop";
$showfile = mysql_query($query_showfile, $pop) or die(mysql_error());
$row_showfile = mysql_fetch_assoc($showfile);
$mim=$row_showfile['fileurl'];
unlink('$mim');

یه فایل رو حذف می کنم . این کار توی لوکال هاست به خوبی انجام میشه ولی وقتی روی هاست واقعی میزارم ارور میده
اینم ارور ها :

Warning: unlink($mim) [function.unlink]: No such file or directory in /home/hestyarc/public_html/admin/updeletedfile.php on line 41

Warning: Cannot modify header information - headers already sent by (output started at /home/hestyarc/public_html/admin/updeletedfile.php:41) in /home/hestyarc/public_html/admin/updeletedfile.php on line 55

MMSHFE
یک شنبه 20 اسفند 1391, 00:08 صبح
دوست عزیز، mim$ رو توی کوتیشن تک گذاشتین. از توی کوتیشن درش بیارین تا بعنوان متغیر بهش نگاه بشه. درمورد خطای دوم هم فایل رو با کدگذاری UTF-8 without BOM ذخیره کنید و اولش ;()ob_start و آخرش ;()ob_end_flush بگذارین.

masiha68
یک شنبه 20 اسفند 1391, 00:12 صبح
نه خب این کارو رو قبلا انجام دادم
با ' با " بدون ' و " ولی بازم همون خطا رو میده

Warning: unlink() [function.unlink]: http does not allow unlinking in /home/hestyarc/public_html/admin/updeletedfile.php on line 40

Warning: Cannot modify header information - headers already sent by (output started at /home/hestyarc/public_html/admin/updeletedfile.php:40) in /home/hestyarc/public_html/admin/updeletedfile.php on line 54
البته نمی دونم چون پرامیز روی 644 می ترسم مشکل از اون باشه

MMSHFE
یک شنبه 20 اسفند 1391, 00:18 صبح
کد کامل رو نگذاشتین و نمیدونم خط 54 چی بوده که خطا داده ولی موردی که برای کدگذاری و بافر خروجی گفتم رو رعایت کنید تا مشکل دوم رفع بشه. برای مشکل اول هم بله باید پرمیشن رو روی 666 بگذارین تا بتونید حذف کنید یا اینکه پوشه رو هم با خود PHP بسازین که Owner کاربر Apache بشه. وقتی از توی کنترل پانل میسازین یا توی سیستم خودتون ساختین و آپلود کنید، Owner میشه کاربر سیستمی که معمولاً همون کاربری هست که برای شما ساخته شده و باهاش توی سرور لاگین میکنید. درهرحال مشکل با تغییر پرمیشن درست میشه.

masiha68
یک شنبه 20 اسفند 1391, 00:23 صبح
<?php require_once('../Connections/pop.php'); ?>
<?php
if (!function_exists("GetSQLValueString")) {
function GetSQLValueString($theValue, $theType, $theDefinedValue = "", $theNotDefinedValue = "")
{
if (PHP_VERSION < 6) {
$theValue = get_magic_quotes_gpc() ? stripslashes($theValue) : $theValue;
}

$theValue = function_exists("mysql_real_escape_string") ? mysql_real_escape_string($theValue) : mysql_escape_string($theValue);

switch ($theType) {
case "text":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "long":
case "int":
$theValue = ($theValue != "") ? intval($theValue) : "NULL";
break;
case "double":
$theValue = ($theValue != "") ? doubleval($theValue) : "NULL";
break;
case "date":
$theValue = ($theValue != "") ? "'" . $theValue . "'" : "NULL";
break;
case "defined":
$theValue = ($theValue != "") ? $theDefinedValue : $theNotDefinedValue;
break;
}
return $theValue;
}
}
$lop=$_GET['fileid'];

mysql_select_db($database_pop, $pop);
$query_showfile = "SELECT * FROM up where fileid=$lop";
$showfile = mysql_query($query_showfile, $pop) or die(mysql_error());
$row_showfile = mysql_fetch_assoc($showfile);
$mim=$row_showfile['fileurl'];
unlink($mim);


if ((isset($_GET['fileid'])) && ($_GET['fileid'] != "")) {
$deleteSQL = sprintf("DELETE FROM up WHERE fileid=$lop",
GetSQLValueString($_GET['fileid'], "int"));

mysql_select_db($database_pop, $pop);
$Result1 = mysql_query($deleteSQL, $pop) or die(mysql_error());
$deleteGoTo = "upload.php";
if (isset($_SERVER['QUERY_STRING'])) {
$deleteGoTo .= (strpos($deleteGoTo, '?')) ? "&" : "?";
$deleteGoTo .= $_SERVER['QUERY_STRING'];
}
header(sprintf("Location: %s", $deleteGoTo));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>در حال حذف فایل ... </title>
</head>

<body>

</body>
</html>
<?php
mysql_free_result($showfile);
?>

در مورد پرمیشن من دستی پرمیشن فولدر رو روی 777 گذاشتم و حتی بعضی فایل های رو که قرار بود حذف کنم اونا رو هم وری 777 گذاشتم ولی بازم همون خطا رو میداد
راستی من url رو اینجوری ذخیره کردم ؛ http://sitename.com/admin/upload/filename.png ؛ فک نمی کنین مشکل از اون باشه ؟

MMSHFE
یک شنبه 20 اسفند 1391, 00:25 صبح
باید url بصورت مسیر فیزیکی داده بشه نه مسیر remote

masiha68
یک شنبه 20 اسفند 1391, 00:36 صبح
ممنون
پس شد دوتا نکته

$mim=$row_showfile['fileurl'];
unlink('upload/'.$mim);
می نویسم واسه نفر بعد :
یکی اینکه دستور unlink واسه حذف خود فایل به کار می ره و با اون میشه بعد از حذف فایل از دیتابیس فایل رو از هاست هم حذف کرد . برای ادرس دهی نباید از ادرس روت استفاده کرد یعنی نباید از htt:// اتفاده کرد و اینکه پرمیشن رو باید به 666 تغییر داد و این کار هم با chmod انجام میشه