Iets installeren vanuit GitHub
Ik zie tegenwoordig steeds meer "kant en klare" scripts/stukken code/hele projecten op GitHub staan.
Heel mooi, makkelijk en fijn natuurlijk, maar ik heb dus eigenlijk geen idee hoe ik dat kan installeren c.q. werkend kan krijgen?
Tot nu toe downloadde ik altijd gewoon de losse PHP files en probeerde ik er een werkend geheel van te krijgen. Dit lukte dan ook redelijk vaak, maar zeker niet altijd. Ik denk dat dit veel makkelijker en beter moet kunnen. Maar hoe?
Bijvoorbeeld dit project: https://github.com/inceddy/ImageCompare
Daar heeft men het over "Composer"...
En zelfs in "demo.php" staat ergens bovenaan "require 'vendor/autoload.php';" terwijl dat bestandje autoload.php niet eens bij dit project zit. Is dat dus weer iets "externs" ofzo? En waarom heb ik dat nodig? Ik bedoel: als het écht nodig was om dit project te laten werken, dan hadden ze die file wel erbij gedaan, toch?
Ik heb een QNAP-NAS waar een webserver (met PHP) op draait en daar zou ik graag dit project van GitHub op willen laten werken.
Hoe kan ik het beste te werk gaan?
Alvast bedankt.
Met vriendelijke groet,
Sjef
Of je moet die zelf even aanmaken....
Lees ook eens deze sites:
https://phptherightway.com/#dependency_management
https://www.codementor.io/jadjoubran/php-tutorial-getting-started-with-composer-8sbn6fb6t
Je kan het ook binnenhalen via de commandline. Zie ook:
https://help.github.com/en/github/creating-cloning-and-archiving-repositories/cloning-a-repository
Dat kan de Qnap overigens ook, want die heeft ook SSH mogelijk.
Het kán zijn dat je even de git-binaries nog moet installeren.
En anders...
Dan kan je ook op de Github-site de boel in een zip-file downloaden, en op de makkelijke manier deze uitpakken en installeren. Helaas valt dat wel buiten het package-management.
Gewijzigd op 27/11/2019 19:30:05 door - Ariën -
Het hele idee is als volgt:
- In de vendor map komen alle pakketten die je met composer installeert.
- In autoload.php wordt geregeld dat je niet ieder pakket met de hand hoeft te "include-en"
- Ook wordt er een JSON bestand bijgehouden/aangemaakt waarin bijgehouden wordt wat er geïnstalleerd is.
Zodoende hoef je de vendor map niet te backup-en. Enkel composer.json. het commando "composer install" zal alles weer downloaden en in de vendor map zetten wanneer nodig.
Maar het gaat allemaal nog veel verder dan dat. Composer houdt ook de geïnstalleerde versies bij van de pakketten en kan deze updaten wanneer dat nodig is. Tevens kunnen pakketten afhankelijk zijn van andere pakketten. Composer zal deze "dependencies" ook automatisch installeren. Composer kijkt zelfs of je de benodigde php modules hebt draaien op je webserver en of je php versie toereikend genoeg is.
Het begint dus allemaal met het installeren van composer. Voor windows is er een simpele installer wat de installatie wel heel erg eenvoudig maakt. Voor Linux en de Mac ligt het iets anders maar als je de documentatie goed volgt dan gaat dat ook zeker lukken. De installatie is geslaagd als je het composer logo te zien krijgt wanneer je "composer" intoetst op de commandline. Ik heb lang geleden een artikeltje geplaatst over composer.
Ik vroeg dit omdat ik dacht dat ik iets met foto's vergelijken moest gaan doen, maar volgens mij kan ik beter proberen om "tekst herkenning" toe te passen....
Dat is echter weer heel iets anders dan waar dit topic over gaat.
Ik denk dat ik dus beter een nieuw topic daarover aan maak!
Merci / groet,
Sjef
Toevoeging op 06/12/2019 20:13:36:
Graag kom ik toch nog even terug op de oorspronkelijke kwestie:
Ik krijg het werkelijk niet voor elkaar om Composer geïnstalleerd te krijgen op de QNAP NAS.
Maar ik vind eerlijk gezegd ook niet echt veel informatie over die combinatie. Het lijkt wel of Composer installeren op een (QNAP) NAS niet zo 1, 2, 3 gedaan is.
Dus wil ik het volgende proberen.
- Ariën - op 27/11/2019 19:28:50:
En anders...
Dan kan je ook op de Github-site de boel in een zip-file downloaden, en op de makkelijke manier deze uitpakken en installeren. Helaas valt dat wel buiten het package-management.
Dan kan je ook op de Github-site de boel in een zip-file downloaden, en op de makkelijke manier deze uitpakken en installeren. Helaas valt dat wel buiten het package-management.
Hoe werkt dat dan precies?
Als ik die zipfile download, dan krijg ik niet de (directory)structuur te zien die volgens mij nodig is om de boel werkend te krijgen.
Op GitHub (https://github.com/thiagoalessio/tesseract-ocr-for-php) staat bijvoorbeeld als voorbeeld:"
Code (php)
1
2
3
2
3
use thiagoalessio\TesseractOCR\TesseractOCR;
echo (new TesseractOCR('text.png'))
->run();
echo (new TesseractOCR('text.png'))
->run();
Maar die mappen krijg ik niet te zien in de zipfile. Dat gaat dan toch ook nooit werken?
Gewijzigd op 06/12/2019 20:14:06 door sjef dresen
Dat zijn namespaces. Als je in TesseractOCR.php kijkt dan zie je op de eerste regel:
In een notendop gezegd, dat is zoiets als include alleen dan de moderne manier.
https://www.php.net/manual/en/language.namespaces.basics.php
Dat is dus niet helemaal juist.
Simpel gezegd zorgen namespaces er voor dat je niet met dubbele class namen komt te zitten. Een zeer welkome aanvulling wanneer je met libraries van derden wilt gaan werken. Er waren vroeger php frameworks waarin zeer lange class namen gebruikt werden om zo dubbele class namen te voorkomen. Er werd een bepaalde structuur gebruikt, iets als Vendor_Bundle_Class. Bijvoorbeeld Mollie_Api_Payment. Nu is dit dankzij de namespaces niet meer nodig. Verschillende pakketten kunnen dezelfde class naam gebruiken zolang ze maar een andere namespace hebben.
Het includen van de bestanden zal nog steeds wel moeten gebeuren. Maar dankzij PHP's spl_autoload_register functie kun je bestanden min of meer automatisch includen. De volgende vraag is dan weer HOE je een link gaat leggen tussen de namespaces en de locatie van de php bestanden die automatisch geladen mogen worden. Dat wordt weer vastgelegd in de PSR-0 en PSR-4 standaard.
De grap is nu dat wanneer je Composer gebruikt er ook direct gebruikt wordt gemaakt van een autoloader en één of beiden autoload standaards. Je kunt zelfs met een paar instellingen in composer.json zorgen dat composer ook jouw eigen libraries automatisch laadt.