编辑到substr和strpos导致错误500

时间:2017-07-29 14:36:24

标签: php substr strpos

我试图对一段代码进行一些编辑,但是当我这样做时,我得到一个错误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']现在echos为" filename。"

好的,所以我需要从字符串的末尾再丢一个字符。我将-3更改为-4,以便我有

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

现在只抛出错误500。 让我感到困惑,因为我认为这将是一个简单的改变。有关为什么我只是将字符数从字符串的开头和结尾处删除而出现问题的任何建议?

1 个答案:

答案 0 :(得分:0)

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

$basename = 'ab_filename.php';

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

现在$name只是" filename "

Live demo

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

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

$basename = 'abcd_filename.php';

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

现在$name是" 文件名"