Giter VIP home page Giter VIP logo

Comments (4)

robwoodgate avatar robwoodgate commented on September 28, 2024

Assuming you don't want to force PHP8 at his stage, I'd recommend using the #[\ReturnTypeWillChange] attribute on all the affected methods to suppress. Otherwise, if you update the declarations, it will fatal error in PHP7.4.

from wp-update-server.

YahnisElsts avatar YahnisElsts commented on September 28, 2024

Thank you for the report. I'd like to fix all of these minor PHP 8 compatibility issues at some point, but I'm busy with another project at the moment. I'll leave the issue open for now.

from wp-update-server.

backlink-market avatar backlink-market commented on September 28, 2024

same here, @YahnisElsts please fix it.

Thank you

Here is a quick fix until the owner updates his package: Replace the includes\Wpup\Header.php with this code:

<?php
class Wpup_Headers implements ArrayAccess, IteratorAggregate, Countable {
	protected $headers = array();

	/**
	 * HTTP headers stored in the $_SERVER array are usually prefixed with "HTTP_" or "X_".
	 * These special headers don't have that prefix, so we need an explicit list to identify them.
	 *
	 * @var array
	 */
	protected static $unprefixedNames = array(
		'CONTENT_TYPE',
		'CONTENT_LENGTH',
		'PHP_AUTH_USER',
		'PHP_AUTH_PW',
		'PHP_AUTH_DIGEST',
		'AUTH_TYPE'
	);

	public function __construct($headers = array()) {
		foreach ($headers as $name => $value) {
			$this->set($name, $value);
		}
	}

	/**
	 * Extract HTTP headers from an array of data (usually $_SERVER).
	 *
	 * @param array $environment
	 * @return array
	 */
	public static function parse($environment) {
		$results = array();
		foreach ($environment as $key => $value) {
			$key = strtoupper($key);
			if ( self::isHeaderName($key) ) {
				//Remove the "HTTP_" prefix that PHP adds to headers stored in $_SERVER.
				$key = preg_replace('/^HTTP[_-]/', '', $key);
				$results[$key] = $value;
			}
		}
		return $results;
	}

	/**
	 * Check if a $_SERVER key looks like a HTTP header name.
	 *
	 * @param string $key
	 * @return bool
	 */
	protected static function isHeaderName($key) {
		return self::startsWith($key, 'X_')
		|| self::startsWith($key, 'HTTP_')
		|| in_array($key, static::$unprefixedNames);
	}

	/**
	 * Parse headers for the current HTTP request.
	 * Will automatically choose the best way to get the headers from PHP.
	 *
	 * @return array
	 */
	public static function parseCurrent() {
		//getallheaders() is the easiest solution, but it's not available in some server configurations.
		if ( function_exists('getallheaders') ) {
			$headers = getallheaders();
			if ( $headers !== false ) {
				return $headers;
			}
		}
		return self::parse($_SERVER);
	}

	/**
	 * Convert a header name to "Title-Case-With-Dashes".
	 *
	 * @param string $name
	 * @return string
	 */
	protected function normalizeName($name) {
		$name = strtolower($name);

		$name = str_replace(array('_', '-'), ' ', $name);
		$name = ucwords($name);
		$name = str_replace(' ', '-', $name);

		return $name;
	}

	/**
	 * Check if a string starts with the given prefix.
	 *
	 * @param string $string
	 * @param string $prefix
	 * @return bool
	 */
	protected static function startsWith($string, $prefix) {
		return (substr($string, 0, strlen($prefix)) === $prefix);
	}

	/**
	 * Get the value of a HTTP header.
	 *
	 * @param string $name Header name.
	 * @param mixed $default The default value to return if the header doesn't exist.
	 * @return string|null
	 */
	public function get($name, $default = null) {
		$name = $this->normalizeName($name);
		if ( isset($this->headers[$name]) ) {
			return $this->headers[$name];
		}
		return $default;
	}

	/**
	 * Set a header to value.
	 *
	 * @param string $name
	 * @param string $value
	 */
	public function set($name, $value) {
		$name = $this->normalizeName($name);
		$this->headers[$name] = $value;
	}

	/* ArrayAccess interface */
     #[\ReturnTypeWillChange]
	public function offsetExists($offset) {
		return array_key_exists($offset, $this->headers);
	}
     #[\ReturnTypeWillChange]
	public function offsetGet($offset) {
		return $this->get($offset);
	}
     #[\ReturnTypeWillChange]
	public function offsetSet($offset, $value) {
		$this->set($offset, $value);
	}
     #[\ReturnTypeWillChange]
	public function offsetUnset($offset) {
		$name = $this->normalizeName($offset);
		unset($this->headers[$name]);
	}

	/* Countable interface */
     #[\ReturnTypeWillChange]
	public function count() {
		return count($this->headers);
	}

	/* IteratorAggregate interface  */
     #[\ReturnTypeWillChange]
	public function getIterator() {
		return new ArrayIterator($this->headers);
	}

}

from wp-update-server.

YahnisElsts avatar YahnisElsts commented on September 28, 2024

Thanks for the reminder! I had forgotten about this one. I've added the #[\ReturnTypeWillChange] attributes to the class.

from wp-update-server.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.