Jeżeli chcesz komentować kliknij na tytuł artykułu, wyświetli się tylko ten artykuł z możliwością komentowania.

poniedziałek, 8 grudnia 2025

 Napisał do mnie użytkownik:

Panie Wojtku czy LottoCada można zaktualizować nowszej wersji PHP ?

Odpisałem :

Niestety nie można. Użyty komponent nie jest już odświeżany do nowszych wersji. Sam ubolewam nad tym. Od wersji 5.26 komponent ten jest martwy. Trzeba korzystać na zewnątrz np w świetnym środowisku VSCode eksportując np losowania jako pliki tekstowe lub pobierając je z serwera. Można też 
chyba choć nie próbowałem korzystać z nowszych wersji w sposób hybrydowy tzn z wersji starej wywoływać wersję nową i pobierać wynik powrotny.

 Nie próbowałem ale nie wytrzymałem i spróbowałem. I w ten sposób zrobiłem tą próbę pisząc skrypt pośredniczący w wysyłaniu danych z programu LottoCAD i odbierający wyniki ze skryptu wykonanego w zainstalowanym w systemie nowszym interpreterze PHP:

<?php

/*
  W programie LottoCAD jest wbudowany interpreter skryptow PHP w wersji max 5.2.6.
  Wymusza to komponent autorstwa Pana Sergheya Pervoznika Delphi4PHP , ktory obsluguje tylko wersje PHP max 5.2.6
  Czasami jednak potrzebne są funkcje dostepne tylko w nowszych wersjach PHP (np. 7.x lub 8.x).
  Dla przykladu biblioteka do obslugi notowan na gieldach papierow wartosciowych wymaga PHP 7.2 lub nowszego.
  Potrzebny jest wiec sposob na uruchomienie skryptu PHP w nowszej wersji PHP z poziomu starszej wersji PHP.
  Wysyłamy zatem do nowszej wersji PHP ciag JSON z danymi, a nastepnie odbieramy wynik.
  Ten skrypt uruchamia okreslony plik PHP w najnowszej wersji PHP z ciagiem JSON jako wejsciem.
  W nowych wersjach mozna budowac skrypty PHP korzystajac z funkcji dostepnych w nowszych wersjach PHP,
  i odbierac ich wyniki i drukowac w programie LottoCad lub na stronach www.
  W analogiczny sposob mozna uruchamiac skrypty w Pythonie z jeszcze bogatszym repertuarem funkcji.
  Sposob uzycia w Pythonie: "python run_new_python.py ciag_json"
  Ten Skrypt dziala z wersja PHP max 5.26 a wywoluje inny PHP w najnowszej wersji zainstalowanej w systemie.
  Uzycie: "php run_new_php.php ciag_json" powinien byc poprawnym ciagiem JSON.
  w PHP, plik JSON jest zapisywany tymczasowo jako 'input.json' i przekazywany do skryptu PHP.
  Jak utworzyc w php ciag JSON przyklad:
    $data = array("key1" => "value1", "key2" => "value2");
    $jsonString = json_encode($data);
    Nastepnie przekaz $jsonString jako drugi argument do tego skryptu.
 */

// Budujemy ciag JSON do przekazania do PHP
$draw = delphi_get_draw_arr(); // pobiera wszystkie losowania z aplikacji LottoCAD
$draw = array_reverse($draw, false); // odwraca tablice, ostatnie losowania sa pierwsze
$limit = 200; // limit losowan przekazywanych
$draw = array_slice($draw,0,$limit); // obcinamy do limitu

// $mainedit to zmienna wbudowana w aplikacje LottoCAD 
// zawierajaca glowne pole edycji losowan 
// budujemy parametr do przekazania w postaci ciagu znakow
$jsonString = '{"draw":'.json_encode($draw).',"mainedit":"'.$mainedit.'"}';
// Zapisz ciag JSON do pliku tymczasowego
$inputFile = 'C:\Users\wojte\Documents\projekty_lc_php\input.json';

// Polecenie zapisuje ciag JSON do pliku tymczasowego
file_put_contents($inputFile, $jsonString);
$newPhpExecutablePath = 'C:\PHP837\php.exe'; // pelna sciezka do nowej wersji PHP
// Sciezka do pliku PHP do uruchomienia w nowej wersji PHP
$phpFilePath = 'C:\Users\wojte\Documents\projekty_lc_php\check_php_version.php';

// --- Budowanie polecenia (wersja inteligentna) ---
// Otaczamy sciezke do pliku wykonywalnego cudzyslowami tylko wtedy, 
// gdy zawiera ona spacje. To najbardziej niezawodna metoda.
$executable = $newPhpExecutablePath;
if (strpos($executable, ' ') !== false) {
    $executable = '"' . $executable . '"';
}
// Zbuduj polecenie do wykonania
// Dodanie '2>&1' na koncu polecenia powoduje, że bledy (stderr)
// zostana rowniez przechwycone i zwrocone w zmiennej $output.
// Argumenty skryptu zawsze zabezpieczamy za pomoca escapeshellarg()
$command = $executable . ' ' . escapeshellarg($phpFilePath) . ' ' . escapeshellarg($inputFile) . ' 2>&1';

// Wykonaj polecenie w nowej wersji PHP
$output = shell_exec($command);

// Wyswietl wynik (w tym ewentualne bledy)
echo $output;

// Opcjonalnie: usun plik tymczasowy po uzyciu
// unlink($inputFile);
?>

Brak komentarzy:

Prześlij komentarz

Dyskusja na blogu LottoCAD