Aktualizace projektu pro PHP7

scientific
Člen | 93
+
0
-

Ahoj všem, dostal se mi do ruky projekt, který mám zmigrovat na novější webhostingový server s PHP7, problém je v tom, že mi log hlásí následující:

[Wed Apr 01 11:07:52.490995 2020] [php7:error] [pid 20621] [client :52581] PHP Fatal error:  Cannot use 'Object' as class name as it is reserved in /var/www/html/projekt/vendor/nette/utils/src/Utils/Object.php on line 54

Abych to vyřešil, je zřejmě potřeba aktualizovat prostřednictvím „composer update“, to se ale též neobejde bez problému:

# composer update
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Loading composer repositories with package information
Updating dependencies (including require-dev)
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - jkuchar/pdfresponse dev-master requires nette/http ~2.4.0|~3.0.0 -> satisfiable by nette/http[v2.4.0, v2.4.1, v2.4.10, v2.4.11, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.4.x-dev, v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.x-dev] but these conflict with your requirements or minimum-stability.
    - jkuchar/pdfresponse dev-master requires nette/http ~2.4.0|~3.0.0 -> satisfiable by nette/http[v2.4.0, v2.4.1, v2.4.10, v2.4.11, v2.4.2, v2.4.3, v2.4.4, v2.4.5, v2.4.6, v2.4.7, v2.4.8, v2.4.9, v2.4.x-dev, v3.0.0, v3.0.1, v3.0.2, v3.0.3, v3.0.4, v3.0.x-dev] but these conflict with your requirements or minimum-stability.
    - Installation request for jkuchar/pdfresponse dev-master -> satisfiable by jkuchar/pdfresponse[dev-master].

Máte prosím někdo pro mě tip, jak to na rozchodit na PHP72 ideálně prostřednictvím aktualizace? Jsem noob, takže bych prosil polopatický postup jak obecně na to, konkrétní návody už si zkusím případně dohledat.

Editoval scientific (1. 4. 2020 13:48)

Ondřej Kubíček
Člen | 494
+
0
-

tak záleží jak máš nastavený composer, potřebuješ minimálně nette 2.4, tipuji že máš starší, tu knihovnu pdfresponse máš v dev verzi, takže ta se ti aktualizuje, ale samotné nette ne, nebo možná jen setinková verze, těžko říct bez composeru

scientific
Člen | 93
+
0
-

Posílám ještě nějaké informace, které si myslíš, že tě zajímají:

# composer -V
Composer version 1.10.1 2020–03–13 20:34:27

# cat composer.json

{
        "name": "nette/sandbox",
        "description": "The sandbox is a pre-packaged Nette Framework project, basic configured structure for your application.",
        "homepage": "http://nette.org",
        "type": "project",
        "license": ["BSD-3-Clause", "GPL-2.0", "GPL-3.0"],
        "authors": [
                {
                        "name": "David Grudl",
                        "homepage": "http://davidgrudl.com"
                },
                {
                        "name": "Nette Community",
                        "homepage": "http://nette.org/contributors"
                }
        ],
        "require": {
                "php": ">= 5.3.7",
                "nette/application": "~2.3.0",
                "nette/bootstrap": "~2.3.0",
                "nette/caching": "~2.3.0",
                "nette/database": "~2.3.0",
                "nette/di": "~2.3.0",
                "nette/finder": "~2.3.0",
                "nette/forms": "~2.3.0",
                "nette/http": "~2.3.0",
                "nette/mail": "~2.3.0",
                "nette/robot-loader": "~2.3.0",
                "nette/safe-stream": "~2.3.0",
                "nette/security": "~2.3.0",
                "nette/utils": "~2.3.0",
                "latte/latte": "~2.3.0",
                "tracy/tracy": "~2.3.0",
                "dg/adminer-custom": "~1.6",
                "jkuchar/pdfresponse": "dev-master"
        },
        "require-dev": {
                "nette/tester": "~1.3"
        }
}

cat composer.lock
Je moc dlouhý, ale podle mě tě stejně nezajímá, případně mohu doposlat.

Děkuji ti za snahu mi pomoci.

Editoval scientific (1. 4. 2020 12:01)

David Grudl
Nette Core | 8110
+
0
-

Nejnovější Nette 2.3 podporuje PHP 7.1.

scientific
Člen | 93
+
0
-

Verze PHP je 7.2.

David Grudl
Nette Core | 8110
+
0
-

Tam Nette 2.3 fungovat může, ale nebylo to testováno.

scientific
Člen | 93
+
0
-

No jak píšu v úvodu, právěže nefunguje:

[Wed Apr 01 11:07:52.490995 2020] [php7:error] [pid 20621] [client :52581] PHP Fatal error:  Cannot use 'Object' as class name as it is reserved in /var/www/html/projekt/vendor/nette/utils/src/Utils/Object.php on line 54

Editoval scientific (1. 4. 2020 13:54)

David Grudl
Nette Core | 8110
+
0
-

Jo, jasně. Možná by se dalo všechny Nette\Object přejmenovat na Nette\LegacyObject a nainstalovat nette/deprecated.

Marek Bartoš
Nette Blogger | 1165
+
0
-

Problém je v té externí knihovně, která spolu s odstraněním Object přestala podporovat starší Nette
https://github.com/…c1c7c7950c09

Zvolil bych fork a tu podporu Nette 2.3 si doplnit, pokud nechceš aktualizovat Nette

scientific
Člen | 93
+
0
-

@DavidGrudl
Uživatel @Mabar mi poradil v vendor/jkuchar/PDFresponse/PDFresponse.php nahradit Nette/Objedct za „Nette/SmartObject“, čímž se mi vyřešil problém se „composer update“

  - Removing jkuchar/pdfresponse (dev-master 5133fbe)
  - Installing jkuchar/pdfresponse (dev-master f14993a): Cloning f14993a735
paragonie/random_compat suggests installing ext-libsodium (Provides a modern crypto API that can be used to generate random bytes.)
setasign/fpdi suggests installing setasign/fpdf (FPDI will extend this class but as it is also possible to use TCPDF or tFPDF as an alternative. There's no fixed dependency configured.)
Package nette/reflection is abandoned, you should avoid using it. No replacement was suggested.

Nyní bych se hádám ještě měl zbavit abstraktní třídy Object v vendor/nette/utils/src/Utils/Object.php:52 Tak, že ji vlastně mohu beztrestně přejmenovat na „LegacyObject“?

- abstract class Object
+ abstract class LegacyObject

Tím pádem bycch nemusel forkovat to PDFresponse.php, jen uvnitř přepsat Název třídy?:

- use Nette\Object;
+ use Nette\LegacyObject;

Chápu to správně? Upravit jméno třídy potom musím všude napříč Nette, jako třeba tady:
File: …/nette/caching/src/Caching/Storages/FileStorage.php:17

Editoval scientific (1. 4. 2020 17:34)

David Grudl
Nette Core | 8110
+
+1
-

Do vendoru nezasahuj. Tady ti nezbývá než aktualizovat na Nette 2.4.

Ale v samotné aplikaci se zbav Nette\Object. Buď náhradou za traitu SmartObject, nebo přejmenování na LegacyObject a doinstalováním balíčku nette/deprecated, který tuto třídu obsahuje.

scientific
Člen | 93
+
0
-

To jsem udělal:

  1. Použil jsem v samotné aplikaci jkuchar/pdfresponse Nette\SmartObject namísto Nette\Object.
  2. Aktualizovat v composer.json „2.3“ → „2.4“
  3. Spustil s úspěšným dokončením „composer update“

Můj problém to ale nevyřešilo, Tracy hlásí (Protože abstraktní třída, která je použita v 29 souborech pořád existuje, ale zárveň si mi sdělil, řže ve vendor mám upravit jen tu samotnou aplikaci „jkuchar/pdfresponse“, na nic dalšího nesahat.):

Compile Error
Cannot use 'Object' as class name as it is reserved search►
Source file

File: .../html/projekt/vendor/nette/utils/src/Utils/Object.php:52

42:     * prototype property. The syntax for adding a new method is:
43:     * <code>
44:     * MyClass::extensionMethod('newMethod', function (MyClass $obj, $arg, ...) { ... });
45:     * $obj = new MyClass;
46:     * $obj->newMethod($x);
47:     * </code>
48:     *
49:     * @property-read Nette\Reflection\ClassType|\ReflectionClass $reflection
50:     * @deprecated use trait Nette\SmartObject
51:     */
52:    abstract class Object
53:    {
54:
55:        /**
56:         * Access to reflection.

Nemám odkomentovat ten řádek @deprecated use trait Nette\SmartObject ?

Děkuji za další nasměrování.

P.S. Jinak díky chlape za super Framework, teprve se s ním učím, mám k němu hodně výhrad, ale všechny jistě pramení z mé nevědomosti, budu se snažit všechno pochopit, abych došel do fáze, kdy ho začnu používat rád. Každopádně velký respekt, doposud sem nevěděl, že je to tvoje práce, též děkuji i komunitě, co ti pomáhá s vývojem.

Editoval scientific (1. 4. 2020 20:25)

scientific
Člen | 93
+
0
-

No Vlastně když se mi povedlo zaktualizovat z 2.3 → 2.4, tak bych asi mohl pokračovat na 3.0 a tak dále, dokud problém s třídou „Objekt“ nepomine? Protože po aktualizaci na 2.4 mi tracy pořád řve, že „Object“ se ta třída jmenovat nemůže.

#composer info
dg/adminer-custom        v1.21.0            Customization for Adminer, the best database management tool written...
jkuchar/pdfresponse      dev-master f14993a PdfResponse is wrapper of mPDF for Nette.
latte/latte              v2.4.8             ☕ Latte: the intuitive and fast template engine for those who want...
mpdf/mpdf                v8.0.5             PHP library generating PDF files from UTF-8 encoded HTML
myclabs/deep-copy        1.9.5              Create deep copies (clones) of your objects
nette/application        v2.4.14            🏆 Nette Application: a full-stack component-based MVC kernel for ...
nette/bootstrap          v2.4.6             ? Nette Bootstrap: the simple way to configure and bootstrap your Ne...
nette/caching            v2.4.7             Nette Caching Component
nette/component-model    v2.3.1             Nette Component Model
nette/database           v2.4.9             💾 Nette Database: layer with a familiar PDO-like API but much mor...
nette/di                 v2.4.14            ? Nette Dependency Injection Container: Flexible, compiled and full-...
nette/finder             v2.4.2             ? Nette Finder: find files and directories with an intuitive API.
nette/forms              v2.4.10            ?? Nette Forms: generating, validating and processing secure forms i...
nette/http               v2.4.11            ? Nette Http: abstraction for HTTP request, response and session. Pr...
nette/mail               v2.4.6             ? Nette Mail: handy email creation and transfer library for PHP with...
nette/neon               v3.0.1             🍸 Nette NEON: encodes and decodes NEON file format.
nette/php-generator      v3.0.5             ? Nette PHP Generator: generates neat PHP code for you. Supports new...
nette/reflection         v2.4.2             Nette Reflection: docblock annotations parser and common reflection ...
nette/robot-loader       v2.4.4             ? Nette RobotLoader: high performance and comfortable autoloader tha...
nette/safe-stream        v2.4.1             Nette SafeStream: atomic and safe manipulation with files via native...
nette/security           v2.4.4             ? Nette Security: provides authentication, authorization and a role-...
nette/tester             v1.7.2             Nette Tester: enjoyable unit testing in PHP with code coverage repor...
nette/utils              v2.4.10            ? Nette Utils: lightweight utilities for string & array manipulation...
paquettg/php-html-parser 2.2.1              An HTML DOM parser. It allows you to manipulate HTML. Find tags on a...
paquettg/string-encode   1.0.1              Facilitating the process of altering string encoding in PHP.
paragonie/random_compat  v9.99.99           PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
psr/log                  1.1.3              Common interface for logging libraries
setasign/fpdi            v2.3.2             FPDI is a collection of PHP classes facilitating developers to read ...
tracy/tracy              v2.4.18            ? Tracy: the addictive tool to ease debugging PHP code for cool deve...
#

Přitom na stránce https://doc.nette.org/…tions/to-2-4 se píše, že tam funguje právě SmartObject jako náhrada za Object. Tak nechápu, proč mi to pořád nejde.

Editoval scientific (1. 4. 2020 20:28)

David Grudl
Nette Core | 8110
+
0
-

Zaktualizuj jen nette/utils na 2.5. Tam už Nette\Object není. Místo toho je tam věc, která by ti měla pomoct odhalit, kde se Object ještě používá.

scientific
Člen | 93
+
0
-

*Hotov, já vím, kde se Nette\Object používá, jen nevím k čemu mi ta informace má být, když nesmím upravovat nic ve vendor. *

Nyní mi tracy hlásí toto, ale mám zákaz to ve vendor upravovat, tak nevím co dál (takže to ve finále upravit můžu ručně upravit na Nette\SmartObject?):

Exception
Replace deprecated Nette\Object with trait Nette\SmartObject in /var/www/html/bill/vendor/nette/caching/src/Caching/Storages/FileStorage.php:17 search►
Source file
Call stack

    inner-code	{closure}(arguments)

    .../nette/caching/src/Caching/Storages/FileStorage.php:17	source  spl_autoload_call(arguments)

     7:
     8:    namespace Nette\Caching\Storages;
     9:
    10:    use Nette;
    11:    use Nette\Caching\Cache;
    12:
    13:
    14:    /**
    15:     * Cache file storage.
    16:     */
    17:    class FileStorage extends Nette\Object implements Nette\Caching\IStorage
    18:    {

Kde všude je děděný Nette\Object jsem věděl už předtím, pomocí

grep -rlw "extends Nette\\Object" /var/www/html/projekt/

Aktuální stav:

# composer info
Do not run Composer as root/super user! See https://getcomposer.org/root for details
dg/adminer-custom        v1.21.0            Customization for Adminer, the best database management tool written...
jkuchar/pdfresponse      dev-master f14993a PdfResponse is wrapper of mPDF for Nette.
latte/latte              v2.4.8             ☕ Latte: the intuitive and fast template engine for those who want...
mpdf/mpdf                v8.0.5             PHP library generating PDF files from UTF-8 encoded HTML
myclabs/deep-copy        1.9.5              Create deep copies (clones) of your objects
nette/application        v2.4.14            🏆 Nette Application: a full-stack component-based MVC kernel for ...
nette/bootstrap          v2.4.6             ? Nette Bootstrap: the simple way to configure and bootstrap your Ne...
nette/caching            v2.4.7             Nette Caching Component
nette/component-model    v2.4.0             ⚛ Nette Component Model
nette/database           v2.4.9             💾 Nette Database: layer with a familiar PDO-like API but much mor...
nette/di                 v2.4.16            💎 Nette Dependency Injection Container: Flexible, compiled and fu...
nette/finder             v2.4.2             ? Nette Finder: find files and directories with an intuitive API.
nette/forms              v2.4.10            ?? Nette Forms: generating, validating and processing secure forms i...
nette/http               v2.4.11            ? Nette Http: abstraction for HTTP request, response and session. Pr...
nette/mail               v2.4.6             ? Nette Mail: handy email creation and transfer library for PHP with...
nette/neon               v3.0.1             🍸 Nette NEON: encodes and decodes NEON file format.
nette/php-generator      v3.3.4             🐘 Nette PHP Generator: generates neat PHP code for you. Supports ...
nette/reflection         v2.4.2             Nette Reflection: docblock annotations parser and common reflection ...
nette/robot-loader       v2.4.4             ? Nette RobotLoader: high performance and comfortable autoloader tha...
nette/safe-stream        v2.4.1             Nette SafeStream: atomic and safe manipulation with files via native...
nette/security           v2.4.4             ? Nette Security: provides authentication, authorization and a role-...
nette/tester             v1.7.2             Nette Tester: enjoyable unit testing in PHP with code coverage repor...
nette/utils              v2.5.4             🛠 Nette Utils: lightweight utilities for string & array manipulat...
paquettg/php-html-parser 2.2.1              An HTML DOM parser. It allows you to manipulate HTML. Find tags on a...
paquettg/string-encode   1.0.1              Facilitating the process of altering string encoding in PHP.
paragonie/random_compat  v9.99.99           PHP 5.x polyfill for random_bytes() and random_int() from PHP 7
psr/log                  1.1.3              Common interface for logging libraries
setasign/fpdi            v2.3.2             FPDI is a collection of PHP classes facilitating developers to read ...
tracy/tracy              v2.4.18            ? Tracy: the addictive tool to ease debugging PHP code for cool deve...
#

Editoval scientific (1. 4. 2020 21:00)

David Grudl
Nette Core | 8110
+
+2
-

Vendor se opravuje tím, že aktualizuješ knihovny Composerem. Ruční úprava by ti k ničemu nebyla, protože by ji Composer hned smazal.

Takže zaktualizuj ještě nette/caching na 2.5.

scientific
Člen | 93
+
0
-

Jo takhle, chápu.

Už to funguje.

Děkuji moc za pomoc.

Editoval scientific (2. 4. 2020 12:49)