/dede/archives_article.php
文件;,2. 找到 delete($id)
方法;,3. 在该方法中添加代码以删除与文章关联的图片。,,以下是一个简单的示例代码:,,“php,function delete($id) {, // 原有删除文章的逻辑, $dsql = new DedeSql();, $dsql>ExecuteNoneQuery("DELETE FROM #@__archives WHERE id='$id'");,, // 删除与文章关联的图片, $specInfo = $this>getOneArchiveSpecInfo($id);, if ($specInfo['body'] && strpos($specInfo['body'], '{dede:field name="image"') !== false) {, preg_match('/{dede:field name="image" value="(.*?)"}/', $specInfo['body'], $matches);, $imagePath = $matches[1];, if (file_exists(DEDEDATA . '/uploads/images/' . $imagePath)) {, unlink(DEDEDATA . '/uploads/images/' . $imagePath);, }, },},
`,,这段代码首先执行原有的删除文章逻辑,然后检查文章的
body` 字段中是否包含图片字段。如果包含,就提取图片路径并删除对应的图片文件。在dedecms 5.6版本中,删除文章的同时删除图片的方法主要涉及到修改两个文件:extend.func.php
和inc_batchup.php
,以下是具体步骤和代码示例:
一、修改extend.func.php
1、/include/extend.func.php
文件。
2、添加以下代码:
“`php
<?php
function GetPicsTruePath($body, $litpic) {
$delfiles = array(); // 存储图片地址数据
if (!empty($litpic)) {
$litpicpath = GetTruePath();
$litpicpath .= $litpic;
$delfiles[] = $litpicpath; // 缩略图地址
}
preg_match_all("/src=["|’|S|s]([^ |/|>]*){0,}(([^>]*).(gif|jpg|png))/isU", $body, $tmpdata);
$picspath = array_unique($tmpdata[2]); // body中所有图片的地址
foreach ($picspath as $tmppath) {
$path = GetTruePath(); // 获得绝对路径
$picpath = preg_replace("/[azAZ]+://[^ |/|\s]*/", ”, $tmppath); // 去掉网址部分
$path .= $picpath;
$delfiles[] = $path; // 保存处理后的数据
}
return $delfiles;
}
function WriteToDelFiles($msg) { // 删除文章的时候会通过此函数记录日志
if (empty($msg)) $savemsg = "未获得消息";
else $savemsg = $msg;
$errorFile = dirname(__FILE__) . "/../data/del_body_file.txt"; // 删除记录文件
$fp = @fopen($errorFile, ‘a’);
@fwrite($fp, "r
{$savemsg}");
@fclose($fp);
}
function GetArcBody($aid) {
global $dsql;
$query = "SELECT dede_addonarticle.body FROM dede_addonarticle WHERE dede_addonarticle.aid = ‘$aid’";
$row = $dsql>GetOne($query);
if (is_array($row)) return $row;
else return false;
}
?>
“`
二、修改inc_batchup.php
1、/dede/inc/inc_batchup.php
文件。
2、添加以下代码:
“`php
<?php
function DelArc($aid, $type = ‘ON’, $onlyfile = false) {
global $dsql, $cfg_cookie_encode, $cfg_multi_site, $cfg_medias_dir;
global $cuserLogin, $cfg_upload_switch, $cfg_delete, $cfg_basedir;
global $admin_catalogs, $cfg_admin_channel;
if ($cfg_delete == ‘N’) $type = ‘OK’;
if (empty($aid)) return;
$aid = ereg_replace("[^09]", ”, $aid);
$arctitle = $arcurl = ”;
// 查询表信息
$query = "Select ch.maintable,ch.addtable,ch.nid,ch.issystem Fromdede_arctiny
arc
left joindede_arctype
tp on tp.id=arc.typeid
left joindede_channeltype
ch on ch.id=arc.channel where arc.id=’$aid’ ";
$row = $dsql>GetOne($query);
$nid = $row[‘nid’];
$maintable = (trim($row[‘maintable’]) == ” ? ‘dede_archives’ : trim($row[‘maintable’]));
$addtable = trim($row[‘addtable’]);
$issystem = $row[‘issystem’];
// 查询档案信息
if ($issystem == 1) {
$arcQuery = "Select arc.*,tp.* from$addtable
arc left joindede_arctype
tp on arc.typeid=tp.id where arc.aid=’$aid’ ";
} else {
$arcQuery = "Select arc.*,tp.*,arc.id as aid from$maintable
arc left joindede_arctype
tp on arc.typeid=tp.id where arc.aid=’$aid’ ";
}
$row = $dsql>GetOne($arcQuery);
if ($row[‘litpic’] != ”) {
$litpic = $row[‘litpic’];
} else {
$litpic = ”;
}
if (empty($row[‘body’])) {
return;
}
if ($type == ‘ALL’ || $type == ‘ON’) {
if ($onlyfile == false) {
// 删除附加表内容
$filenameh = DEDEDATA . ‘/’ . $addtable . ‘/aid_’ . $aid . ‘.htm’;
if (@is_file($filenameh)) @unlink($filenameh);
$filenameh = DEDEDATA . ‘/’ . $addtable . ‘/aid_’ . $aid . ‘_1.htm’;
if (@is_file($filenameh)) @unlink($filenameh);
}
}
if ($type == ‘DEL’ && empty($row[‘body’])) {
return;
}
// 解析Body中的资源,并删除
$willDelFiles = GetPicsTruePath($row[‘body’], $litpic);
$nowtime = time();
$executetime = MyDate(‘Ymd H:i:s’, $nowtime); // 获得执行时间
$msg = "r
" . $row[‘title’];
WriteToDelFiles($msg);
if (!empty($willDelFiles)) {
foreach ($willDelFiles as $file) {
if (file_exists($file) && !is_dir($file)) {
if (unlink($file)) {
$msg = "r
位置:" . $file . "r
结果:删除成功!" . "r
时间:" . $executetime;
} else {
$msg = "r
位置:" . $file . "r
结果:删除失败!" . "r
时间:" . $executetime;
}
} else {
$msg = "r
位置:" . $file . "r
结果:文件不存!" . "r
时间:" . $executetime;
}
WriteToDelFiles($msg);
}
} else {
$msg = "r
未在Body中解析到数据" . "r
Body原始数据:" . $row[‘body’] . "r
时间:" . $executetime;
WriteToDelFiles($msg);
}
}
“`
3、保存修改:将上述代码添加到对应文件中,并保存文件。
4、备份文件:在进行任何修改之前,请确保备份原始文件,以防出现问题时可以恢复。
FAQs(常见问题解答)
问题1:如何确认文章及其图片已被成功删除?
答:可以通过查看data/del_body_file.txt
日志文件来确认,该文件会记录每次删除操作的详细信息,包括删除的图片路径和删除状态,如果删除成功,会在日志文件中看到相应的成功信息,如果删除失败,也会记录失败的原因。
问题2:为什么有时删除图片会失败?
答:删除图片可能会失败的原因有多种,包括但不限于:文件权限不足、文件被其他进程占用、路径错误等,确保服务器上的PHP脚本有足够的权限来删除文件,并且文件路径正确无误,如果问题持续存在,建议检查服务器的错误日志以获取更多信息。
原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1114969.html
本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。
发表回复