我正在使用几个简单的PHP函数。一个用于检测用户是否在iPhone上,另一个用于调整图像大小。
<?php
/* User agent function */
function userAgent(){
$browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
if ($browser == true) { $var = 1; }
return $var;
}
/* Image resize function */
function imageResize($width, $height) {
$var = userAgent($var);
if($var == 1){
$width = round($width / 2);
$height = round($height / 2);
}else{
$width = round($width);
$height = round($height);
}
echo "width=\"$width\" height=\"$height\"";
}
?>
问题是,如果我在userAgent()函数中手动将$ var更改为0或1,则图像不会调整大小,但如果我在imageResize()函数中将$ var更改为== 0,则做。
为什么变量没有从第一个函数传到第二个函数,或者我做错了什么?
答案 0 :(得分:5)
strpos
永远不会返回true
。您需要测试$browser != false
,否则您的功能将永远无法识别iPhone。
但是,您的代码不必要地复杂化,返回一个整数在这里并没有用。我建议简化重写:
// Make it return `true` or `false` instead of `1`, also make it universal
function isAgent($string)
{
return (strpos($_SERVER['HTTP_USER_AGENT'],$string) !== false);
}
/* Image resize function */
function imageResize($width, $height) {
if(isAgent("iPhone")){
$width = round($width / 2);
$height = round($height / 2);
}else{
$width = round($width);
$height = round($height);
}
// Consider using CSS
echo "style=\"width: {$width}px; height: {$height}px;\"";
}
答案 1 :(得分:3)
如果用户代理是iPhone,您似乎只返回$var
,否则您尝试返回未定义的变量(在您的userAgent函数中)
尝试:
function userAgent(){
$browser = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$var = 0;
if ($browser !== false) { $var = 1; }
return $var;
}
答案 2 :(得分:0)
您希望$var
函数处理userAgent
参数吗?在这种情况下,您需要将其指定为参数。
function userAgent( $var ) {
...
否则,您可能希望初始化函数体中的$var
。保持if-then-else
对称是明智的策略:
if( $browse ) {
$var = 1;
} else {
$var = 0;
}
你可以写一点比如
更简洁function userAgent() {
$browser = .....
return $browser ? 1 : 0;
}