仅转换文件名而不扩展但功能错误

时间:2015-12-12 01:58:03

标签: php regex format

我有一个url,其中包含各种POST-DATA和最后一个图像文件。 我的示例链接是:http://website-link.com/?page=gf_signature&signature=565dbca63791e5.87676354.png

我想从网址中分离565dbca63791e5.87676354.png并从中分隔扩展名(.png)。

我试过这个:

<?php
  $images = array();
  $imagesNew = array();
  $imgUrls = array(
            'ptSignature' => 'http://website-link.com/?page=gf_signature&signature=5668695879dc84.35037895.png',
            'pSignature' => 'http://website-link.com/?page=gf_signature&signature=5668694f80aa55.79055562.png',
            'witness1Signature' => 'http://website-link.com/?page=gf_signature&signature=5668695875c6e5.03917128.png',
            'witness2Signature' => 'http://website-link.com/?page=gf_signature&signature=5668695879dc84.35037895.png',
        )


  function make_without_ext($str)
  {
    $regex = "/signature=(?<signature>[^&]+)/";
    preg_match($regex, $str, $matches);
    $signature = $matches["signature"];
    $ext = substr(strrchr($signature, '.'), 1);

    $without_extension = basename($signature, '.png');
    return $without_extension;
  }


  foreach ($imgUrls as $imgUrl) {
    $imgWithoutExt = make_without_ext($imgUrl);
    array_push($images, $imgWithoutExt);
  }

  foreach ($images as $image) {
    $content = file_get_contents($image);
    $data = base64_encode($content);
    array_push($imagesNew, $data) 
  }

  print '<pre>';
  print_r ($imagesNew);
  print '<pre>';

但它显示syntax error, unexpected 'function' (T_FUNCTION)

1 个答案:

答案 0 :(得分:1)

我为这样的事情做的是使用PHP的explode功能。使用你的代码,我会做这样的事情:

$str_parts = explode('.', $str);
$extension = array_pop($str_parts);

请注意,这假设你有一个。在你的字符串!然后您可以使用substr或其他东西返回没有此扩展名的原始字符串。如果签名始终是您网址中的最后一个参数,那么您可以使用相同的技术抓取它,如果您想要使用parse_url可能有更好的方法。

更好的工作实例

<?php
$url = "http://website-link.com/?page=gf_signature&signature=565dbca63791e5.87676354.png";

// to keep query only
$a = explode('&', parse_url($url, PHP_URL_QUERY));
$count = 0;
// looping parameters 
foreach($a as $as => $that){
    if(preg_match('|signature=|', $a[$count]) != false){ 
        // this is like, if this string is contained in this string do that 
        $b = trim($a[$count], 'signature='); // to remove the part we dont want
        $b = trim($b, '.png'); // again
        echo $b; // voilà!
    }

    $count++;
}
?>

我必须承认这一点foreach($a as $as => $that){我是一种在循环中徘徊的人。