My bad, I just tested it; it's not deleting the actual file anymore on my setup.It's immediate and permanent.
It could be PHP 8.5.x incompatibility. :|
My bad, I just tested it; it's not deleting the actual file anymore on my setup.It's immediate and permanent.
Do you have any attachment-related add-ons installed?I am on 8.3.28 and it appears to be doing the same here
If you are talking about the underlying attachment data file, XenForo only deletes them hourly as part of the attachment clean up. Internally, XenForo treats attachments and attachment data differently (there is anI tested a video file, if it matters, as it's easier to locate on R2 than to test an image attachment.
If not a PHP 8.3/8.5 issue, could it be XF 2.3.8?
Do you have any attachment-related add-ons installed?
xf_attachment table and a different xf_attachment_data table. When you delete an attachment, the attachment is immediately deleted, but the attachment data (which also includes the data file) is deleted as part of an hourly cleanup process.(http.request.uri.path.extension in {"css" "js" "png" "jpg" "jpeg" "gif" "ico" "svg" "webp" "woff" "woff2"})
@digitalpoint is there any reason you haven't considered to an option to set up Edge TTL for
?Code:(http.request.uri.path.extension in {"css" "js" "png" "jpg" "jpeg" "gif" "ico" "svg" "webp" "woff" "woff2"})
(ends_with(http.request.uri.path, ".7z")) or (ends_with(http.request.uri.path, ".avi")) or (ends_with(http.request.uri.path, ".bz2")) or (ends_with(http.request.uri.path, ".csv")) or (ends_with(http.request.uri.path, ".css")) or (ends_with(http.request.uri.path, ".dmg")) or (ends_with(http.request.uri.path, ".doc")) or (ends_with(http.request.uri.path, ".docx")) or (ends_with(http.request.uri.path, ".eps")) or (ends_with(http.request.uri.path, ".exe")) or (ends_with(http.request.uri.path, ".gif")) or (ends_with(http.request.uri.path, ".gz")) or (ends_with(http.request.uri.path, ".ico")) or (ends_with(http.request.uri.path, ".iso")) or (ends_with(http.request.uri.path, ".jar")) or (ends_with(http.request.uri.path, ".jpeg")) or (ends_with(http.request.uri.path, ".jpg")) or (ends_with(http.request.uri.path, ".js")) or (ends_with(http.request.uri.path, ".mid")) or (ends_with(http.request.uri.path, ".midi")) or (ends_with(http.request.uri.path, ".mp3")) or (ends_with(http.request.uri.path, ".mp4")) or (ends_with(http.request.uri.path, ".mpeg")) or (ends_with(http.request.uri.path, ".ogg")) or (ends_with(http.request.uri.path, ".pdf")) or (ends_with(http.request.uri.path, ".ppt")) or (ends_with(http.request.uri.path, ".pptx")) or (ends_with(http.request.uri.path, ".rar")) or (ends_with(http.request.uri.path, ".tar")) or (ends_with(http.request.uri.path, ".svg")) or (ends_with(http.request.uri.path, ".svgz")) or (ends_with(http.request.uri.path, ".ttf")) or (ends_with(http.request.uri.path, ".webm")) or (ends_with(http.request.uri.path, ".webp")) or (ends_with(http.request.uri.path, ".woff")) or (ends_with(http.request.uri.path, ".woff2")) or (ends_with(http.request.uri.path, ".xls")) or (ends_with(http.request.uri.path, ".xlsx")) or (ends_with(http.request.uri.path, ".zip"))
http.request.uri.path.extension is a thing, and probably could use some extra extensions like avif.That's weird, I don't see that cache rule on the CF account (even creating a new API key). What should I do to force the creation of it? By default it isn't createdIt already does (and has for a long time). This expression for a Cache Rule was generated by this addon for example:
It doesn’t add rules unless you ask it to.That's weird, I don't see that cache rule on the CF account (even creating a new API key). What should I do to force the creation of it? By default it isn't created
- ValueError: inet_pton(): Argument #1 ($ip) must not contain any null bytes
- src/XF/Util/Ip.php:14
- Generated by: Unknown account
- Feb 8, 2026 at 4:23 PM
Stack trace
#0 src/XF/Util/Ip.php(14): inet_pton([invalid])
#1 src/XF/Entity/Ip.php(25): XF\Util\Ip::stringToBinary([invalid], false)
#2 src/XF/Mvc/Entity/Entity.php(842): XF\Entity\Ip->verifyIp([invalid], 'ip', 6, Array)
#3 src/XF/Mvc/Entity/Entity.php(683): XF\Mvc\Entity\Entity->_verifyValueCustom([invalid], 'ip', 6, Array)
#4 src/XF/Mvc/Entity/Entity.php(618): XF\Mvc\Entity\Entity->set('ip', [invalid])
#5 src/XF/Repository/IpRepository.php(29): XF\Mvc\Entity\Entity->__set('ip', [invalid])
#6 src/XF/Service/Post/PreparerService.php(254): XF\Repository\IpRepository->logIp(25492, [invalid], 'post', 150769)
#7 src/XF/Service/Post/PreparerService.php(199): XF\Service\Post\PreparerService->writeIpLog([invalid])
#8 src/XF/Service/Thread/ReplierService.php(236): XF\Service\Post\PreparerService->afterInsert()
#9 src/addons/DigitalPoint/Analytics/XF/Service/Thread/Replier.php(9): XF\Service\Thread\ReplierService->_save()
#10 src/XF/Service/ValidateAndSavableTrait.php(42): DigitalPoint\Analytics\XF\Service\Thread\Replier->_save()
#11 src/XF/PreRegAction/Thread/Reply.php(47): XF\Service\Thread\ReplierService->save()
#12 src/XF/PreRegAction/AbstractHandler.php(132): XF\PreRegAction\Thread\Reply->executeAction(Object(XF\Entity\PreRegAction), Object(SV\SearchImprovements\XF\Entity\ThreadCollab), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#13 src/XF.php(914): XF\PreRegAction\AbstractHandler->XF\PreRegAction\{closure}()
#14 src/XF/PreRegAction/AbstractHandler.php(125): XF::asVisitor(Object(SV\ElasticSearchEssentials\XF\Entity\User), Object(Closure))
#15 src/XF/Repository/PreRegActionRepository.php(96): XF\PreRegAction\AbstractHandler->completeAction(Object(XF\Entity\PreRegAction), Object(SV\ElasticSearchEssentials\XF\Entity\User))
#16 src/XF/Repository/PreRegActionRepository.php(126): XF\Repository\PreRegActionRepository->completeUserAction(Object(SV\ElasticSearchEssentials\XF\Entity\User), NULL)
#17 src/XF/ControllerPlugin/LoginPlugin.php(199): XF\Repository\PreRegActionRepository->completeUserActionIfPossible(Object(SV\ElasticSearchEssentials\XF\Entity\User), NULL)
#18 src/addons/SV/UserAutocomplete/XF/ControllerPlugin/Login.php(15): XF\ControllerPlugin\LoginPlugin->completeLogin(Object(SV\ElasticSearchEssentials\XF\Entity\User), true)
#19 src/XF/Pub/Controller/LoginController.php(183): SV\UserAutocomplete\XF\ControllerPlugin\Login->completeLogin(Object(SV\ElasticSearchEssentials\XF\Entity\User), true)
#20 src/addons/DigitalPoint/Analytics/XF/Pub/Controller/Login.php(13): XF\Pub\Controller\LoginController->actionLogin(Object(XF\Mvc\ParameterBag))
#21 src/XF/Mvc/Dispatcher.php(362): DigitalPoint\Analytics\XF\Pub\Controller\Login->actionLogin(Object(XF\Mvc\ParameterBag))
#22 src/XF/Mvc/Dispatcher.php(264): XF\Mvc\Dispatcher->dispatchClass('XF:Login', 'Login', Object(XF\Mvc\RouteMatch), Object(DigitalPoint\Cloudflare\XF\Pub\Controller\Login), NULL)
#23 src/XF/Mvc/Dispatcher.php(121): XF\Mvc\Dispatcher->dispatchFromMatch(Object(XF\Mvc\RouteMatch), Object(DigitalPoint\Cloudflare\XF\Pub\Controller\Login), NULL)
#24 src/XF/Mvc/Dispatcher.php(63): XF\Mvc\Dispatcher->dispatchLoop(Object(XF\Mvc\RouteMatch))
#25 src/XF/App.php(2824): XF\Mvc\Dispatcher->run()
#26 src/XF.php(814): XF\App->run()
#27 index.php(23): XF::runApp('XF\\Pub\\App')
#28 {main}
Request state
array(4) {
["url"] => string(12) "/login/login"
["referrer"] => string(30) "https://rvforums.com/register/"
["_GET"] => array(0) {
}
["_POST"] => array(5) {
["_xfToken"] => string(8) "********"
["login"] => string(10) "[removed]"
["password"] => string(8) "********"
["remember"] => string(1) "1"
["_xfRedirect"] => string(30) "https://rvforums.com/register/"
}
}
It is not, although I do know what the issue is. PHP changed howIs this error related to this add-on?
inet_pton() works in PHP versions 8.5.1, 8.4.16, 8.3.29, 8.2.30 and 8.1.34
A server error occurred. Please try again later.
ValueError: inet_pton(): Argument #1 ($ip) must not contain any null bytes src/XF/Util/Ip.php:14
Generated by: Unknown account Jan 16, 2026 at 9:58 PM
Stack trace
#0...
XF/Util/Ip.php to make it compatible with the newer versions of PHP.Yep, the PHP change was made in 8.3.29, so will be part of any version after that.Thank you. I'm using PHP 8.3.30.
We use essential cookies to make this site work, and optional cookies to enhance your experience.