-2

重複の可能性:
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;
    }

}
4

1 に答える 1

2
  • これらのファイルのエンコーディング タイプは何ですか? BOM 付きの UTF8 でエンコードされている場合は、BOMなしの UTF8に変換します。
  • タグ の<?php前後の空白もすべて削除します。?>
  • ブラウザーから html ページのソースを確認すると、空白の場所に役立つ場合があります。
于 2012-12-15T12:58:24.493 に答える