重複の可能性:
PHPによってすでに送信されているヘッダー
ユーザーがモバイルデバイスを介してWebサイトにアクセスしている場合、ユーザーをサブドメインにリダイレクトするモバイル検出phpスクリプトが実行されているWebサイトを継承しました。
Webサイトはデスクトップでは正常に機能しますが、iPhoneでは次のように表示されます。
「警告:ヘッダー情報を変更できません-16行目の/home/autolox/public_html/common.phpで(出力は/home/autolox/public_html/index.php:1で開始されました)によって既に送信されたヘッダー
警告:ヘッダー情報を変更できません-17行目の/home/autolox/public_html/common.phpで(出力は/home/autolox/public_html/index.php:1で開始されました)によって既に送信されたヘッダー "
私はPHPの経験が豊富ではないので、これが何を意味するのかわかりませんが、common.phpファイルの全文は次のとおりです。
<?php
require_once(realpath(implode(DIRECTORY_SEPARATOR, array(dirname(__FILE__), 'MobileDetect.php'))));
$MobileDetect = new MobileDetect();
if($MobileDetect->IsMobile()){
header("HTTP/1.1 301 Moved Permanently");
header("Location: http://mobi.autolox.co.uk/");
exit();
}
これは私のインデックスファイルの一番上です:
<?php require_once(realpath(implode(DIRECTORY_SEPARATOR, array(dirname(__FILE__), 'common.php'))));?>
<!DOCTYPE html>
<html lang="en">
これについていくつかの助けが欲しいです、私は困惑しています!
編集:
モバイル検出phpファイルも実行されています。以下を参照してください。
/**
* Detect mobile devices
* @idilico
* @version 2.7.0
* @copyright Copyright (c) 2010-2011 Idilico (http://www.idilico.com)
*/
class MobileDetect {
// Device constants
const DEVICE_ANDROID = "android";
const DEVICE_BLACKBERRY = "blackberry";
const DEVICE_IPHONE = "iphone";
const DEVICE_IPHONE4 = "iphone4";
const DEVICE_OPERA = "opera";
const DEVICE_PALM = "palm";
const DEVICE_WINDOWS = "windows";
const DEVICE_GENERIC = "generic";
const DEVICE_IPAD = "ipad";
const DEVICE_NORMAL = "normal";
/**
* Hold the device useragent
*
* @var string
*/
private $_useragent;
/**
* Boolean that is set to true if
* the current device is mobile
*
* @var bool
*/
private $_isMobile = false;
/**
* Device booleans that get set when
* the devices matche
*
* @var bool
*/
private $_isAndroid = null;
private $_isBlackberry = null;
private $_isIphone = null;
private $_isIphone4 = null;
private $_isOpera = null;
private $_isPalm = null;
private $_isWindows = null;
private $_isGeneric = null;
private $_isIpad = null;
/**
* Regular expressions for the different devices
*
* @var array
*/
private $_devices = array(
"android" => "android",
"blackberry" => "blackberry",
"ipad" => "ipad",
"iphone4" => "(8A293|4_3)",
"iphone" => "(iphone|ipod)",
"opera" => "(opera mini|opera mobi)",
"palm" => "(avantgo|blazer|elaine|hiptop|palm|plucker|xiino|webos)",
"windows" => "(iemobile|smartphone|windows phone|htc_hd2)",
"generic" => "(kindle|mobile|mmp|midp|o2|pda|pocket|psp|symbian|smartphone|treo|up.browser|up.link|vodafone|wap|u970)"
);
/**
* Constructor
*
* @access public
* @return void
*/
public function __construct() {
$this->_useragent = $_SERVER['HTTP_USER_AGENT'];
foreach ($this->_devices as $device => $regexp) {
if ($this->IsDevice($device) && $this->_isMobile == FALSE) {
$this->_isMobile = true;
}
}
}
/**
* Check if surfing with a particular device
*
* @access private
* @param string $device
* @return bool
*/
private function IsDevice($device) {
$var = "_is" . ucfirst($device);
$this->$var = @$this->$var === null ? (bool) preg_match("/" . $this->_devices[strtolower($device)] . "/i", $this->_useragent) : $this->$var;
if ($device != 'generic' && $this->$var == true) {
$this->_isGeneric = false;
}
return $this->$var;
}
/**
* Get the device type
*
* @param public
* @return string
*/
public function GetDevice(){
foreach($this->_devices as $device_string => $regex){
if( $this->IsDevice($device_string) ){
return $device_string;
}
}
return self::DEVICE_NORMAL;
}
/**
* Call methods like this IsMobile() | IsAndroid() | IsIphone() | IsBlackberry() | IsOpera() | IsPalm() | IsWindows() | IsGeneric() | IsIpad() through IsDevice()
*
* @access public
* @param string $name
* @param array $arguments
* @return bool
*/
public function __call($name, $arguments) {
$device = substr($name, 2);
if ($name == "Is" . ucfirst($device)) {
return $this->IsDevice($device);
} else {
trigger_error("Method $name is not defined", E_USER_ERROR);
}
}
/**
* Returns true if surfing on a mobile device
*
* @access public
* @return bool
*/
public function IsMobile() {
return $this->_isMobile;
}
}