[英]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 vars在backend / 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.