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.

<?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;
}
?>

En wat is de uitvoer?
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?
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

[size=xsmall]Toevoeging op 22/08/2021 10:17:28:[/size]

@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..

[size=xsmall]Toevoeging op 22/08/2021 10:21:57:[/size]

array(1) { [0]=> string(83) "./swetest: /lib64/libm.so.6: version `GLIBC_2.29' not found (required by ./swetest)"
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?
ik ben niet zo'n held met c makefiles maar ik zie geen dependancies naar glibc, alleen naar hun eigen code..


# $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


[size=xsmall]Toevoeging op 22/08/2021 10:43:39:[/size]

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.
Je hebt geen VPS, begrijp ik?
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.

[size=xsmall]Toevoeging op 22/08/2021 12:22:44:[/size]

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.


 $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?


[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.;" }



[size=xsmall]Toevoeging op 22/08/2021 12:47:42:[/size]

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

[size=xsmall]Toevoeging op 22/08/2021 12:55:28:[/size]

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"

[size=xsmall]Toevoeging op 22/08/2021 12:58:56:[/size]

Ik denk dat het komt vanwege ./ als PATH
Permission denied. Komt dat niet door je rechten, die niet op executable staan?
Die staan op 777, en de owner is overal ftp, ook in de root.

[size=xsmall]Toevoeging op 22/08/2021 13:08:49:[/size]

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

"sh: ./swetest: No such file or directory"
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?

Reageren