编辑 substr 和 strpos 导致错误 500

edit to substr and strpos causes Error 500

我正在尝试对一段代码进行一些编辑,但是当我这样做时出现错误 500。 对于这个例子,假设

basename(__FILE__)

是my_filename.php

密码是:

$HTTP_GET_VARS['feed_file'] = $_GET['feed_file'] 
= substr(
            basename(__FILE__),
            3,
            strpos( basename(__FILE__), '.php') -3
        );

$HTTP_GET_VARS['feed_file'] 会回显为 "filename"

现在,如果

basename(__FILE__) 

是aaa_filename.php 原始代码会将 $HTTP_GET_VARS['feed_file'] 作为“_filename”

我把代码改成了

$HTTP_GET_VARS['export_feed'] = $_GET['export_feed'] 
= substr(
            basename(__FILE__),
            4,
            strpos( basename(__FILE__), '.php') -3
        );

$HTTP_GET_VARS['export_feed']现在回显为 "filename."

好的,所以我需要从字符串末尾再减去一个字符。我将 -3 更改为 -4,这样我就有

$HTTP_GET_VARS['export_feed'] = $_GET['export_feed'] 
= substr(
            basename(__FILE__),
            4,
            strpos( basename(__FILE__), '.php') -4
        );

现在才抛出错误500。 把我搞糊涂了,因为我认为这将是一个简单的改变。关于为什么我在简单地更改要从字符串的开头和结尾删除的字符数时遇到问题的任何建议?

我会使用 preg_match 动态获取 "filename":

$basename = 'ab_filename.php';

if(preg_match('/_(.+)\.php$/',$basename,$matches)):
    $name = $matches[1]; // 'filename'
endif;

现在 $name 只是“文件名

Live demo

除此之外,您自己共享的代码片段不会导致 500 服务器错误。可能存在多米诺骨牌效应,错误会在其他地方触发。了解如何查找错误日志以获取详细信息。

最后,如果您将继续使用当前的方法,请不要硬编码偏移量(您的 -3-4)。而是像这样动态地计算它:

$basename = 'abcd_filename.php';

$pos_ = strpos($basename,'_') + 1;
$len  = strpos( $basename, '.php') - $pos_;
$name = substr($basename, $pos_, $len);

现在 $name 是“文件名