简体   繁体   English

PHP没有获得include relativetime.php文件的变量,但是relativetime.php之外的所有其他$ lang变量都很好

[英]PHP not getting the vars of include relativetime.php file but all other $lang vars outside relativetime.php are just fine

I have 2 functions first to detect language and other to convert time into relative time 我首先有2个功能来检测语言,然后将时间转换为相对时间

index.php Is the file where i am calling the 2 functions with include_once index.php是我使用include_once调用2个函数的文件

include_once('./backend/detect_language.php');
include_once('./backend/relativetime.php');

Now let me explain what each one does and it's structure 现在让我解释一下每个人的工作及其结构

backend/detect_language.php backend / detect_language.php

if(session_id() == '') {
     session_start();
}
header('Cache-control: private'); // IE 6 FIX


$idioma = substr($_SERVER["HTTP_ACCEPT_LANGUAGE"], 0, 2);

    if(isSet($idioma))
{

$lang = $idioma;


$_SESSION['lang'] = $lang;

setcookie("lang", $lang, time() + (3600 * 24 * 30));
}
else if(isSet($_SESSION['lang']))
{
$lang = $_SESSION['lang'];
}
else if(isSet($_COOKIE['lang']))
{
$lang = $_COOKIE['lang'];
}
else
{
$lang = 'en';
}

switch ($lang) {
  case 'en':
  $lang_file = 'lang.en.php';
  break;

  case 'de':
  $lang_file = 'lang.de.php';
  break;

  case 'pt':
  $lang_file = 'lang.pt.php';
  break;

  default:
  $lang_file = 'lang.en.php';

}

include_once 'languages/'.$lang_file;

so it basically detect the browser language and get the lang file of each language, the $lang vars is working just fine on index.php but when is comes to my /backend/relativetime.php it's not showing the lang vars , here is my relative time function file: 所以它基本上可以检测浏览器语言并获取每种语言的lang文件, $lang vars在index.php上可以正常工作,但是当涉及到我的/backend/relativetime.php时,它并没有显示lang vars,这是我的相对时间函数文件:

backend/relativetime.php backend / relativetime.php

function relativeTime($ts) {
        if(!ctype_digit($ts)) {
            $ts = strtotime($ts);
        }
        $diff = time() - $ts;
        if($diff == 0) {
            return $lang ['just_now'];
        } elseif($diff > 0) {
            $day_diff = floor($diff / 86400);
            if($day_diff == 0) {
                if($diff < 60) return $lang ['just_now'];
                if($diff < 120) return $lang ['one_minute_ago'];
                if($diff < 3600) return floor($diff / 60) . $lang ['s_minutes_ago'];
                if($diff < 7200) return $lang ['one_hour_ago'];
                if($diff < 86400) return floor($diff / 3600) . $lang ['hours_ago'];
            }
            if($day_diff == 1) { return $lang ['yesterday']; }
            if($day_diff < 7) { return $day_diff . $lang ['s_days_ago']; }
            if($day_diff < 31) { 
                if(ceil($day_diff / 7) == 1){
                    return ceil($day_diff / 7) . $lang ['last_week_ago'];
                } else {
                    return ceil($day_diff / 7) . $lang ['s_weeks_ago'];
                }
            }

            if($day_diff < 60) { return $lang ['last_month']; }
            return date('m-Y', $ts);
                        } else {
            $diff = abs($diff);
            $day_diff = floor($diff / 86400);
            if($day_diff == 0) {
                if($diff < 120) { return $lang ['in_a_minute']; }
                if($diff < 3600) { return $lang ['in'] . floor($diff / 60) . $lang ['minutes']; }
                if($diff < 7200) { return $lang ['in_an_hour']; }
                if($diff < 86400) { return $lang ['in'] . floor($diff / 3600) . $lang ['hours']; }
            }
            if($day_diff == 1) { return $lang ['tomorow']; }
            if($day_diff < 4) { return date('l', $ts); }
            if($day_diff < 7 + (7 - date('w'))) { return $lang ['next_week']; }
            if(ceil($day_diff / 7) < 4) { return 'in ' . ceil($day_diff / 7) . $lang ['weeks']; }
            if(date('n', $ts) == date('n') + 1) { return $lang ['next_month']; }
            return date('F Y', $ts);
        }
    }

    // Usage
    //$date  = date('Y-m-d G:i:s'); // Outputs 2017-03-19 03:17:04
    //$rel   = relativeTime($date); // Outputs 2 minutes ago, 4 hours ago, 2 days ago, 6 weeks ago, etc based on the time right now

So on index.php it's showing other ****$lang** vars** just fine, but it's not showing the $lang vars where is in the backend/relativetime.php I tried to include the backend/detect_language.php inside the backend/relativetime.php function, but also do not work, 因此,在index.php上,它显示了其他**** $ lang ** vars **就好了,但是并没有显示$ lang varsbackend / relativetime.php中的位置,我试图在其中包含backend / detect_language.php backend / relativetime.php函数,但也不起作用,

it shows the $lang vars inside relativetime.php are undefined but it's defined inside the lang file 它显示relativetime.php中的$ lang vars未定义,但在lang文件中定义

Only 只要

relativetime.php $lang vars is not working relativetime.php $ lang vars无法正常工作

but

All others $lang vars is working just fine 所有其他$ lang vars工作正常

Someone have a solution? 有人有解决办法吗?

Basic example of What i need: 我需要的基本示例:

$userinfo['name'] = "bob";
$userinfo['lastname'] = "johnson";
function displayinfo() {
echo $userinfo['name'] . " " . $userinfo['lastname'];
}
displayinfo();

so how the array can be accessed in the displayinfo() function? 那么如何在displayinfo()函数中访问数组? this is what I need to solve this. 这就是我需要解决的问题。

I solved with the following: 我解决了以下问题:

backend/relativetime.php backend / relativetime.php

function relativeTime($ts) {
//global should be here 
global $lang;
        if(!ctype_digit($ts)) {
            $ts = strtotime($ts);
        }
        $diff = time() - $ts;
        if($diff == 0) {
            return $lang ['just_now'];
        } elseif($diff > 0) {
            $day_diff = floor($diff / 86400);
            if($day_diff == 0) {
                if($diff < 60) return $lang ['just_now'];
                if($diff < 120) return $lang ['one_minute_ago'];
                if($diff < 3600) return floor($diff / 60) . $lang ['s_minutes_ago'];
                if($diff < 7200) return $lang ['one_hour_ago'];
                if($diff < 86400) return floor($diff / 3600) . $lang ['hours_ago'];
            }
            if($day_diff == 1) { return $lang ['yesterday']; }
            if($day_diff < 7) { return $day_diff . $lang ['s_days_ago']; }
            if($day_diff < 31) { 
                if(ceil($day_diff / 7) == 1){
                    return ceil($day_diff / 7) . $lang ['last_week_ago'];
                } else {
                    return ceil($day_diff / 7) . $lang ['s_weeks_ago'];
                }
            }

            if($day_diff < 60) { return $lang ['last_month']; }
            return date('m-Y', $ts);
                        } else {
            $diff = abs($diff);
            $day_diff = floor($diff / 86400);
            if($day_diff == 0) {
                if($diff < 120) { return $lang ['in_a_minute']; }
                if($diff < 3600) { return $lang ['in'] . floor($diff / 60) . $lang ['minutes']; }
                if($diff < 7200) { return $lang ['in_an_hour']; }
                if($diff < 86400) { return $lang ['in'] . floor($diff / 3600) . $lang ['hours']; }
            }
            if($day_diff == 1) { return $lang ['tomorow']; }
            if($day_diff < 4) { return date('l', $ts); }
            if($day_diff < 7 + (7 - date('w'))) { return $lang ['next_week']; }
            if(ceil($day_diff / 7) < 4) { return 'in ' . ceil($day_diff / 7) . $lang ['weeks']; }
            if(date('n', $ts) == date('n') + 1) { return $lang ['next_month']; }
            return date('F Y', $ts);
        }
    }

    // Usage
    //$date  = date('Y-m-d G:i:s'); // Outputs 2017-03-19 03:17:04
    //$rel   = relativeTime($date); // Outputs 2 minutes ago, 4 hours ago, 2 days ago, 6 weeks ago, etc based on the time right now

Instead of try access each array as global I added global only to the array $lang global $lang; 与其尝试以全局方式访问每个数组,不如将全局变量仅添加到数组$ lang global $lang; and then automatically all arrays becomes global. 然后所有数组自动变为全局数组。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM