Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: PHP: Too few arguments to function

Sivun loppuun

walkout_ [22.02.2020 18:54:56]

#

Minulla tulee "Fatal Error: too few arguments to function" kun asenssin XAMPP:in jossa php 7.1

https://www.php.net/manual/en/migration71.incompatible.php

Mikä versio XAMPP:sta pitäs asentaa että sain PHP varsion 7.0?

The Alchemist [22.02.2020 19:14:54]

#

Korjaa koodisi toimimaan uudemmalla PHP:llä. Se on joka tapauksessa edessä jossain välissä.

Metabolix [22.02.2020 19:20:49]

#

XAMPPin latauslistassa versio näyttää menevän PHP-version mukaan, eli loogisesti PHP 7.0 löytyy XAMPP 7.0:sta, jonka viimeisin versio on ilmeisesti XAMPP 7.0.9.

Kuitenkin PHP 7.0:n tuki (mukaan lukien kriittiset tietoturvapäivitykset) on loppunut vuoden 2019 alussa, joten kyllä järkevintä olisi käyttää uudempia versioita. Jos alat päivittää, fiksuinta on päivittää saman tien (vaikka vaiheittain) uusimpaan versioon (PHP 7.4), jotta ei ole sitten heti uutta päivitystä edessä.

walkout_ [22.02.2020 19:24:00]

#

The Alchemist kirjoitti:

Korjaa koodisi toimimaan uudemmalla PHP:llä. Se on joka tapauksessa edessä jossain välissä.

Minulla on virtaalipalvelimella käyttöjärjestelmänä Ubuntu 16.04 LTS ja toisella 14.04 LTS ja niitä ei pysty päivittään uudempaan, koska se ei kait onnistu kun ne ovat virtuaalipalvelimia. Ja niihin ei saa uusinta php jos ei käännä itse.

Mutta koodin korjaaminen on järkevää, koska olen tekemässä yleiseen jakoon tulevaa open source projektia.

Lisäys:

Erori tulee rivillä 72 alla olevassa koodissa:

<?php

/**
 * ZF-Ext Framework
 *
 * @package    My_Auth_Adapter
 * @license    http://www.gnu.org/copyleft/gpl.html     GNU GPL
 */

class MyAuthAdapter implements Zend_Auth_Adapter_Interface
{
    protected $_username;
    protected $_password;
	/**
     * Sets username and password for authentication
     *
     * @return void
     */
    public function __construct($username, $password)
    {
        // ...

		$this->_username=$username;
        $this->_password=$password;

    }

    /**
     * Performs an authentication attempt
     *
     * @throws Zend_Auth_Adapter_Exception If authentication cannot
     *                                     be performed
     * @return Zend_Auth_Result
     */
    public function authenticate()
    {

		$db = Zend_Registry::get('dbAdapter');

		Zend_Db_Table::setDefaultAdapter($db);

		/*
		for ($i = 0; $i < 50; $i++) {
		$dynamicSalt .= chr(rand(33, 126));
		}
		*/

		$adapter = new Zend_Auth_Adapter_DbTable(
			$db,
			'users',
			'username',
			'password',
			"SHA1(CONCAT('"
            . Zend_Registry::get('staticSalt')
            . "', ?, password_salt))"
		);

		$adapter->setIdentity($this->_username)->setCredential($this->_password);

		// get select object (by reference)
		$select = $adapter->getDbSelect();
		$select->where('active = "TRUE"');

		// authenticate, this ensures that users.active = TRUE
		$adapter->authenticate();

		//$result = $this->authenticate($adapter);

		if ($adapter->authenticate()->isValid()) {
		$authNamespace = new Zend_Session_Namespace('Zend_Auth');
		$authNamespace->user = $this->_username;
		return new Zend_Auth_Result(Zend_Auth_Result::SUCCESS);
		} else {
		return new Zend_Auth_Result(Zend_Auth_Result::FAILURE);
		}
		return new Zend_Auth_Result(Zend_Auth_Result::FAILURE);

    }
}

Lisäys:

Ja myös tässä rivissä Zend Framework -kontrollerissa:

$result= $auth->authenticate(new MyAuthAdapter($username,$password));

Metabolix [22.02.2020 22:31:14]

#

Kuten virheviestissä selvästi lukee, annat liian vähän argumentteja funktiolle. Esimerkiksi dokumentaatiosta näkee, että Zend_Auth_Result::__construct ottaa vähintään kaksi arvoa. Koodisi on siis jo ennestään väärä. Käsittämätöntä, että et kehitysvaiheessa lue virhelokia ja korjaa virheitäsi. Toisaalta juuri tällaisen toheltamisen takia PHP:ssä on päätetty, että tämäkin vakava virhetilanne tuottaa varoituksen sijasta fataalin virheen.

walkout_ [23.02.2020 00:37:44]

#

Nyt on korjattu virheet.

The Alchemist [24.02.2020 16:25:05]

#

walkout_ kirjoitti:

The Alchemist kirjoitti:

Korjaa koodisi toimimaan uudemmalla PHP:llä. Se on joka tapauksessa edessä jossain välissä.

Minulla on virtaalipalvelimella käyttöjärjestelmänä Ubuntu 16.04 LTS ja toisella 14.04 LTS ja niitä ei pysty päivittään uudempaan, koska se ei kait onnistu kun ne ovat virtuaalipalvelimia. Ja niihin ei saa uusinta php jos ei käännä itse.

Tämä ei liity mitenkään siihen, että koodin pitäisi toimia myös uusimmalla versiolla. PHP:hen ei tietääkseni ole käytännössä tehty sellaisia muutoksia, jotka rikkoisi at sovelluksen vanhemmilla versioilla, jos koodin korjaa uudemman version mukaiseksi. Monille uusille funktioille on myös ns. polyfillit, joten niitäkin voi käyttää melko huoletta.

Metabolix [24.02.2020 17:13:47]

#

Virtuaalipalvelimen voi yleensä päivittää aivan kuten tavallisenkin.

walkout_ [27.02.2020 01:49:15]

#

Metabolix kirjoitti:

Virtuaalipalvelimen voi yleensä päivittää aivan kuten tavallisenkin.

Ei onnistunut LeaseWebissä komentorivillä vaan asia pitää tehdä toisin.

Lisäys:

The Alchemist kirjoitti:

(24.02.2020 16:25:05): ”– –” Tämä ei liity mitenkään siihen, että koodin...

Ok. Hyvä tietää.


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta