exec() werkt niet bij de ene provider maar wel bij de andere

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Jean Cremers

Jean Cremers

22/08/2021 06:52:11
Quote Anchor link
hoi,

Ik heb een scriptje wat planeetstanden uitrekent mbv een binary 'swetest', die heb ik zelf hier gebakken en werkt op m'n linux mint bak, werkte ook bij neostrada, maar ik wil naar vimexx en daar werkt het niet.
Ik heb ze gemaild of ze kunnen testen maar ze zeggen dat ik bij een programmeur moet zijn. :)
Ik heb even geen idee wat ik kan doen. Ik heb ze gevraagd of ze daar swetest op de cmdline willen testen voor me maar dat doen ze dus niet. En function_exists(exec) geeft wel true dus het zou moeten kunnen.
Ik heb er trouwens 2 versies van swetest staan, een 32 en een 64 bits, beide geven geen sjoege.
Wat kan ik doen?

Voor de vollledigheid, dit is de code, de regel met exec() staat in het midden.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
<?php
  $swephsrc
= '/home/blabla/public_html/se/';
  $sweph = '/home/blabla/public_html/se/';
  unset($PATH,$out,$longitude,$speed);
  $date_now = date ("Y-m-d");
  $inmonth = strftime("%m", time());
  $inday = strftime("%d", time());
  $inyear = strftime("%Y", time());
  $inhours = strftime("%H", time());
  $inmins = strftime("%M", time());
  $insecs = strftime("%S", time());
  $intz = (strftime("%z", time()) / 100);     //time zone on server
  if ($intz >= 0)
  {

    $whole = floor($intz);
    $fraction = $intz - floor($intz);
  }

  else
  {
    $whole = ceil($intz);
    $fraction = $intz - ceil($intz);
  }

  $inhours = $inhours - $whole;
  $inmins = $inmins - ($fraction * 100);  //this was 60, but Adrián Argüelles noted an error when time zones like +10.30 were used
  // adjust date and time for minus hour due to time zone taking the hour negative

  $utdatenow = strftime("%d.%m.20%y", mktime($inhours, $inmins, $insecs, $inmonth, $inday, $inyear));
  $utnow = strftime("%H:%M:%S", mktime($inhours, $inmins, $insecs, $inmonth, $inday, $inyear));
  $transit_date_time = strftime("%d %B 20%y", mktime($inhours, $inmins, $insecs, $inmonth, $inday, $inyear)) . " at " . strftime("%H:%M", mktime($inhours, $inmins, $insecs, $inmonth, $inday, $inyear));;
  putenv("PATH=$swephsrc");
  // get 10 planets

  exec ("swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789mD -eswe -fPls -g, -head", $out);

  // Each line of output data from swetest is exploded into array $row, giving these elements:
  // 0 = planet name
  // 1 = longitude
  // 2 = speed

  foreach ($out as $key => $line)
  {

    $row = explode(',',$line);
    $longitude[$key] = $row[1];
    $speed[$key] = $row[2];
  };


echo '<center><table><tr>';
for ($i = 0; $i < 12; $i++)
  {

  echo "<td nowrap><img src='http://jcremers.com/se/img/$i.gif'>" .  ' ' . Convert_Longitude($longitude[$i]);
  if ($speed[$i] < 0) echo "r";
  }

echo '</table></center>';

function
Convert_Longitude($longitude)
{

  $sign_num = floor($longitude / 30);
  $pos_in_sign = $longitude - ($sign_num * 30);
  $deg = floor($pos_in_sign);
  $full_min = ($pos_in_sign - $deg) * 60;
  $min = floor($full_min);
  $full_sec = round(($full_min - $min) * 60);
  if ($deg < 10) { $deg = "0" . $deg; }
  if ($min < 10) { $min = "0" . $min; }
  if ($full_sec < 10) { $full_sec = "0" . $full_sec; }
  //return $deg . " " . $signs[$sign_num] . " " . $min . "' " . $full_sec . chr(34);
  $sign_num += 16;
  $img = "<img src='http://jcremers.com/se/img/$sign_num.gif'>";
  return $deg . " " . $min . "' " . $full_sec . chr(34) . " " . $img;
}

?>
Gewijzigd op 22/08/2021 13:37:13 door Jean Cremers
 
PHP hulp

PHP hulp

22/12/2024 03:56:03
 
- Ariën  -
Beheerder

- Ariën -

22/08/2021 10:11:05
Quote Anchor link
En wat is de uitvoer?
 
Rob Doemaarwat

Rob Doemaarwat

22/08/2021 10:15:32
Quote Anchor link
Ik begrijp dat je dus zelf geen SSH toegang hebt om het eerst zelf via de command line te proberen?

Execute bit is gezet?

En als je de stderr naar de stdout omleid ("2>&1" achter je commando), wat zit er dan in je $out?
 
Jean Cremers

Jean Cremers

22/08/2021 10:16:13
Quote Anchor link
De symbooltjes, gifjes, staan er allemaal prima maar allemaal met stand 0, de berekeningen zijn dus niet gedaan. Als je wil zien hoe het zou moeten kijk naar hoe het nu op neostrada uitziet, bovenin de site: https://jcremers.com

Toevoeging op 22/08/2021 10:17:28:

@Rob execute bit is gezet ja, geen toegang tot ssh, ik heb gevraagd of ze even op een cmdline wilden proberen maar dat houden ze af. Ik ga eens proberen met die redirect..

Toevoeging op 22/08/2021 10:21:57:

array(1) { [0]=> string(83) "./swetest: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by ./swetest)"
 
- Ariën  -
Beheerder

- Ariën -

22/08/2021 10:27:58
Quote Anchor link
Je roept blijkbaar een executable op je hosting aan die ze niet aanbieden. Althans de versie ervan. Misschien niet je je executable zo bouwen dat er niet naar de versie gekeken wordt?
Gewijzigd op 22/08/2021 10:28:49 door - Ariën -
 
Jean Cremers

Jean Cremers

22/08/2021 10:37:38
Quote Anchor link
ik ben niet zo'n held met c makefiles maar ik zie geen dependancies naar glibc, alleen naar hun eigen code..

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# $Header$
# this Makefile creates a SwissEph library and a swetest sample on 64-bit
# Redhat Enterprise Linux RHEL 6.

# The mode marked as 'Linux' should also work with the GNU C compiler
# gcc on other systems.

# If you modify this makefile for another compiler, please
# let us know. We would like to add as many variations as possible.
# If you get warnings and error messages from your compiler, please
# let us know. We like to fix the source code so that it compiles
# free of warnings.
# send email to the Swiss Ephemeris mailing list.
#

CFLAGS = -g -Wall -fPIC      # for Linux and other gcc systems
OP=$(CFLAGS)  
CC=cc    #for Linux

# compilation rule for general cases
.o :
    $(CC) $(OP) -o $@ $? -lm
.c.o:
    $(CC) -c $(OP) $<    

SWEOBJ = swedate.o swehouse.o swejpl.o swemmoon.o swemplan.o sweph.o\
     swephlib.o swecl.o swehel.o

swetest: swetest.o libswe.a
    $(CC) $(OP) -o swetest swetest.o -L. -lswe -lm -ldl

swemini: swemini.o libswe.a
    $(CC) $(OP) -o swemini swemini.o -L. -lswe -lm -ldl

# create an archive and a dynamic link libary fro SwissEph
# a user of this library will inlcude swephexp.h  and link with -lswe

libswe.a: $(SWEOBJ)
    ar r libswe.a    $(SWEOBJ)

libswe.so: $(SWEOBJ)
    $(CC) -shared -o libswe.so $(SWEOBJ)

clean:
    rm -f *.o swetest libswe*
    
###
swecl.o: swejpl.h sweodef.h swephexp.h swedll.h sweph.h swephlib.h
sweclips.o: sweodef.h swephexp.h swedll.h
swedate.o: swephexp.h sweodef.h swedll.h
swehel.o: swephexp.h sweodef.h swedll.h
swehouse.o: swephexp.h sweodef.h swedll.h swephlib.h swehouse.h
swejpl.o: swephexp.h sweodef.h swedll.h sweph.h swejpl.h
swemini.o: swephexp.h sweodef.h swedll.h
swemmoon.o: swephexp.h sweodef.h swedll.h sweph.h swephlib.h
swemplan.o: swephexp.h sweodef.h swedll.h sweph.h swephlib.h swemptab.h
sweph.o: swejpl.h sweodef.h swephexp.h swedll.h sweph.h swephlib.h
swephlib.o: swephexp.h sweodef.h swedll.h sweph.h swephlib.h
swetest.o: swephexp.h sweodef.h swedll.h


Toevoeging op 22/08/2021 10:43:39:

Kunnen jullie waarschijnlijk ook niet veel mee, ik heb de vraag gesteld op het forum van de swiss ephemeris waar deze code vandaan komt, ik laat nog weten wat eruit komt.
 
- Ariën  -
Beheerder

- Ariën -

22/08/2021 10:49:42
Quote Anchor link
Je hebt geen VPS, begrijp ik?
 
Jean Cremers

Jean Cremers

22/08/2021 11:12:02
Quote Anchor link
dit is gewone hosting bij vimexx van 4.50 per maand, niks bijzonders dus. Op de mailing list voor dit spul wordt me verteld op de server zelf te compileren maar dan kan natuurlijk niet zonder vps.
Voorlopig zit het er dus gewoon niet in, als ik nog verder kom laat ik het horen.

Toevoeging op 22/08/2021 12:22:44:

Zo, ik ben even mooi geholpen daar, ik kreeg wat aanpassingen aan de makefile zodat die zonder dependancies compileert, heb de binary aan de praat. Krijg planeetstanden alleen wel nog een warning, die ta maken heeft met het pad waardoor niet de optimale methode wordt gebruikt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$swephsrc = '/domains/blabla/public_html/se/';
 $sweph = '/domains/blabla/public_html/se/';
 unset($PATH,$out,$longitude,$speed);
 putenv("PATH=$swephsrc");
  // get 10 planets
  exec ("./swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789mD -eswe -fPls -g, -head 2>&1", $out);


En dat geeft behalve de output deze warning nog, die is niet fataal want als die bestanden niet gevonden worden wordt naar een andere methode omgschakeld die echter minder kan.
Dus op de een of andere manier zet ik PATH niet goed?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
[4]=> string(40)  "error: SwissEph file 'seas_18.se1' not found in PATH '/domains/blabla/public_html/se/'" [12]=> string(39) "Chiron , 0.0000000, 0.0000000" [13]=> string(0) "" [14]=> string(118) "warning: SwissEph file 'sepl_18.se1' not found in PATH '/domains/blabla/public_html/se/'" [15]=> string(19) "using Moshier eph.;" }



Toevoeging op 22/08/2021 12:47:42:

Ook opgelost door als path gewoon ./ te geven.
Nou dan ben ik hier uit! Hartelijk bedankt voor de hulp.

Toevoeging op 22/08/2021 12:55:28:

Toch nog niet helemaal. Als ik naar public_html/se browse, waar de index.php en de binary staat krijg ik mooi resultaat maar als ik vanuit de hoofdmap in index.php die code wil aanroepen met

include include('se/index.php');

krijg ik

"sh: ./swetest: Permission denied"

Toevoeging op 22/08/2021 12:58:56:

Ik denk dat het komt vanwege ./ als PATH
Gewijzigd op 22/08/2021 12:24:04 door Jean Cremers
 
- Ariën  -
Beheerder

- Ariën -

22/08/2021 13:03:23
Quote Anchor link
Permission denied. Komt dat niet door je rechten, die niet op executable staan?
 
Jean Cremers

Jean Cremers

22/08/2021 13:07:08
Quote Anchor link
Die staan op 777, en de owner is overal ftp, ook in de root.

Toevoeging op 22/08/2021 13:08:49:

Als ik de code vanuit het forum aanroep met include ../se/index.php krijg ik weer dit

"sh: ./swetest: No such file or directory"
Gewijzigd op 22/08/2021 13:09:19 door Jean Cremers
 
- Ariën  -
Beheerder

- Ariën -

22/08/2021 13:15:21
Quote Anchor link
Zelf raad ik aan om voor het gemak binaries in /bin te plaatsen.
Kan je dan niet in exec() /bin/swetest met de nodige parameters erachter, uitvoeren?
 
Jean Cremers

Jean Cremers

22/08/2021 13:21:44
Quote Anchor link
Als ik alles in de root, public_html, zet werkt alles.
Ik moet ook een path zetten omdat de binary ook weer bestanden raadpleegt met ephemeriden, dus ik ben bang dat dat niet werkt, ik zal het nog eens proberen.

Toevoeging op 22/08/2021 13:25:58:

sorry, swetest gebruikt al parameters, waaronder dus die paden:

$sweph = './';
exec ("./swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789mD -eswe -fPls -g, -head", $out);


Toevoeging op 22/08/2021 13:31:53:

en bovendien moeten die bestanden in het pad staan dus ook:

$swephsrc = './';
putenv("PATH=$swephsrc");

Leuke puzzel :) Maar ik heb het in ieder geval aan de praat, al is het in de root, ach..
 
Ray Mond

Ray Mond

22/08/2021 21:19:58
Quote Anchor link
als je ./ zou vervangen naar bijvoorbeeld /se dan zou het toch ook moeten werken in de se map? of enkel / gebruiken?
 
Jean Cremers

Jean Cremers

23/08/2021 07:27:31
Quote Anchor link
@Ray, is me niet gelukt, ik vind het best zoals het nu werkt.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.