Mit PHP auf C zugreifen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Mit PHP auf C zugreifen

    Hallo, grosse bitte um Hilfe. Habe ein PHP-Script, das auf eine c datei zugreifen soll. Jetzt kann ich bei meinem Hoster aber keine c datei laufen lassen, die tut da einfach nichts (geht um ein astroscript und die c datei enthält die daten die es braucht um planetenstände längen und breitengrade etc, zu berechnen). Ich steh hier jetzt wie ein Ochs vom Berg, der Programmierer hat mir geschrieben die Datei ist c für Linux, und das es wohl nicht geht, weil c auf meinem Webspace nicht ausgeführt wird. Ich habe leider überhaupt keine Ansatzpunkt, wie ich dieses Problem lösen kann. Bitte nicht wundern über meine vielleicht doofe Frage, aber ich bin nicht vom Fach und ausser ab und an mal vorgefertigte php oder perl skripte meinen Bedürfnissen entsprechend umzustricken habe ich Null Ahnung. Eigentlich wäre meine Frage, kann man C auf php umstricken? Wer macht sowas, wie teuer ist das? Oder müsste ich besser den Hoster wechseln. Gibt es überhaupt Webspace wo C ausgeführt wird (habe schon viel rumtelefoniert, aber an den Servicetelefonen konnten die mir gar nichts dazu sagen) Wie könnte man ne Problemlösung überhaupt angehen? Ich weiss echt nicht weiter.

  • #2
    Hallo,

    ich habe den Betreff deines Posts angepasst. "Hilfe" braucht hier so gut wie jeder. Und da die Zeit der helfenden nur begrenzt ist, sollte im Betreff schon klar sein, worum es geht. Bitte gewöhn dir das für die Zukunft an!

    Desweiteren: Hast du eine Ausführbare Datei? Dann ist es erst einmal unerheblich, ob das Programm in C geschrieben wurde, oder nicht. Wenn dein Programmierer dir sagt, dass sie für Linux ist, dann wird das schon stimmen.

    Was hast du denn Probiert, um dein Programm überhaupt auszuführen? Quelltext deines PHP-Scriptes wäre hilfreich!

    Da du ja selber sagst, dass du keine Ahnung hast, und somit auch keine Grundlagen lieferst, mit denen du die Hinweise, die man hier sonst bekommen würde, abarbeitest, verschiebe ich das ganze mal in die Projekthilfe!
    [FONT="Helvetica"]twitter.com/unset[/FONT]

    Shitstorm Podcast – Wöchentliches Auskotzen

    Kommentar


    • #3
      C wird nicht ausgeführt. C wird kompiliert und dann ist es nicht mehr C.
      Damit ein C-Programm auf deinem Werbserver funktioniert, muss es für dessen Architektur (Linux?) geschrieben und kompiliert worden sein. Ich gehe mal davon aus, dass das der Fall ist.

      Schau dir mal system() und dessen Kollegen an! Damit kannst du aus PHP heraus Programme in einer Shell starten.
      Manche Hoster verbieten das aber. system() und Co. sind bei denen gar nicht verfügbar.

      Kommentar


      • #4
        Hallo,

        Zitat von futurefee Beitrag anzeigen
        kann man C auf php umstricken?
        Das ist prinzipiell möglich, aber wegen der enthaltenen astronomischen Berechnungen sicherlich recht aufwändig. Daher solltest du entweder einplanen, Geld dafür auszugeben oder gleich nach einem PHP-Skript suchen, was das alles kann.

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Erstmal Danke, dass ihr euch überhaupt drauf einlasst ner alten Frau was zu erklären. Ich habe sowas natürlich nie gelernt, aber ich bastel halt gerne an meiner Homepage rum, öfter mal was Neues reinsetzen, und freu mich immer wenn die Technik das tut, was sie soll.

          Die infos hab ich mir gerade aufgerufenausgedruckt.
          Server Software ist unix.

          Der Aufruf der kommt, wenn es darum geht anhand der Geburstdaten zu rechnen ist folgender:

          Warning: file(natal_files/house_.txt) [[COLOR=#0000ff]function.file[/COLOR]]: failed to open stream: No such file or directory in /mnt/web5/10/96/5447996/htdocs/xxxxx/astrology_scripts/natal_line.php on line 1320

          In Zeile 1320 steht
          $file_array = file($file)

          Die Datein mit den Häusern sind vorhanden, sehen aber folgendermassen aus:
          house_1.txt, house_2.txt u.s.w..

          Ein php-script mit den Funktionen habe ich im gesamten Netz gesucht, aber nicht gefunden. Hab echt alles durchforstet.

          Geld um mir das zum Laufen zu bringen wäre okay.

          Zum Skript, generell lässt es sich alles aufrufen. Es zeigt auch den Radix in verschiedenen Form an, aber es rechnet halt nicht.

          Kommentar


          • #6
            OffTopic:

            Wenn es nicht um astronomische sondern um astrologische Berechnungen geht, würde ich im Zweifelsfall alles gleich auf mt_rand umschreiben und damit den Sternen überlassen.

            SCNR

            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Das System bei meinem Hoster führt es nicht aus

              Jetzt suche ich dringend einen Hoster wo es ausgeführt werden kann. Falls jemand einen Tip hat, würde ich mich drüber freuen. Geb ja nicht so schnell auf.

              Schönen Abend noch
              Futurefee

              Kommentar


              • #8
                Zitat von futurefee Beitrag anzeigen
                Jetzt suche ich dringend einen Hoster wo es ausgeführt werden kann.
                Da wirst du keinen finden, der es dir erlaubt, selbstkompilierte Programme auszuführen. Es sei denn, du setzt deinen eigenen Server auf. Dafür gibt es Anbieter. Aber ich glaube eher nicht, dass du das tun willst.

                Falls jemand einen Tip hat, würde ich mich drüber freuen. Geb ja nicht so schnell auf.
                Ich hab anscheinend was an den Augen, denn ich kann beim besten Willen keinen Hinweis auf den Original-C-Quellcode und dessen genaue Aufgabenstellung finden. Zeig beide mal her, dann finden wir sicher einen Weg, das nach PHP umzusetzen.

                Gerade was gängige Algorithmen in der Astronomie betrifft, gibt es oft brauchbare Umsetzungen für Perl oder Python. PHP ist da etwas armselig bestückt, weil Kalender- und Sonnenstandsfunktionen schon eingebaut sind, und der normale PHP-Programmierer damit anscheinend vollkommen zufrieden ist.

                Was deine Fehlermeldung angeht: Die besagt nur, dass die per file() angeforderte Datei nicht vorhanden ist oder das Script keine ausreichenden Zugriffsrechte besitzt.
                Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                Kommentar


                • #9
                  Hag mal den Link zu der Datei angehängt



                  http://www.kleinegutefee.com/astrotest/sweph/swetest


                  Liebe Grüße
                  Futurefee

                  Kommentar


                  • #10
                    Hallo,

                    fireweasel sprach vom Quellcode, nicht von der EXE oder DLL als text/plain. Das ist nicht menschenlesbar.

                    Gruß,

                    Amica
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Ich habe davon keinen Quellcode

                      das ist die Datei die nicht ausgeführt wird. Mehr weiss ich doch darüber auch nicht, das ist doch mein Problem.

                      Kommentar


                      • #12
                        Zitat von AmicaNoctis Beitrag anzeigen
                        fireweasel sprach vom Quellcode, nicht von der EXE oder DLL als text/plain. Das ist nicht menschenlesbar.
                        Hehe, wer sagt denn, dass ich ein Mensch bin?

                        Und danke, dass du die EXE für mich downgeloadet und getestet hast. Man weiß ja nie, welche böse Software man sich einfängt.

                        Zitat von futurefee Beitrag anzeigen
                        das ist die Datei die nicht ausgeführt wird. Mehr weiss ich doch darüber auch nicht, das ist doch mein Problem.
                        Das ist schlecht. Dann beschreibe doch bitte deine Aufgabenstellung. Vielleicht finden wir damit heraus, ob es eine fertige Lösung gibt.
                        Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

                        Kommentar


                        • #13
                          Die

                          Wo fang ich an? Für die Erstellung von Horsokopen hat man Formulare, in die werden Datum, Uhrzeit und Ort eingegeben. Dann greift das auf die Ephemeridentabellen zu und gleichzeitig muss es auf die zugehörigen Texte zugreifen. Was es nicht tut, da ich nicht an die Ephemeridentabellen rankomme. Das soll eine der Ephemeridentabellen sein (ich schreibe soll, weil ich noch gar nicht reingucken konnte, da ich die weder auf meinem kleinen Laptop noch auf dem alten Mac aufbekomme):

                          http://www.kleinegutefee.com/astrote...ph/seas_18.se1

                          Ausserdem ´müssen die Planetenstände aus den Ephemeridentabellen gleichzeitig in eine Grafik eingetragen werden.

                          Praktisch sieht es so aus:

                          http://www.kleinegutefee.com/astrotest/

                          Wenn man da auf right now klickt, müssten sich die Transite des Augenblicks als Grafik und als Tabelle zeigen (bei right now ohne Textbeschreibungen, weil es nur im die Transite an sich geht) Tun sie aber nicht, weil es nicht auf die Tabellen zugreifen kann. Der Zugriff auf die Tabellen läuft über swetest. Beim Geburtshoroskop kann es zum Beispiel, wie ich vor kurzem schon beschrieb nicht auf die dazugehörigen Text zugreifen, weil es dazu erstmal die Planetenstände haben muss, die in den Tabellen stehen. Da swetest auf dem Server nicht ausgeführt wird, komme ich nicht an die Tabellen.

                          Hier ist z.B. der Sourcecode von der Datei right_now.php

                          PHP-Code:
                          <?
                          // calculate astronomic data
                            $swephsrc = 'sweph';
                            $sweph = 'sweph';
                           
                            // Unset any variables not initialized elsewhere in the program
                            unset($PATH,$out,$pl_name,$longitude1,$speed1);
                           
                            //get date and time right now
                            $date_now = date ("Y-m-d");
                           
                            $inmonth = gmdate("m");
                            $inday = gmdate("d");
                            $inyear = gmdate("Y");
                           
                            $inhours = gmdate("H");
                            $inmins = gmdate("i");
                            $insecs = "0";
                           
                            $intz = 0;
                           
                            // adjust date and time for minus hour due to time zone taking the
                          hour negative
                            $utdatenow = strftime("%d.%m.%Y", mktime($inhours, $inmins, $insecs,
                          $inmonth, $inday, $inyear));
                            $utnow = strftime("%H:%M:%S", mktime($inhours, $inmins, $insecs,
                          $inmonth, $inday, $inyear));
                           
                            putenv("PATH=$PATH:$swephsrc");
                           
                            // get LAST_PLANET planets
                            exec ("swetest -edir$sweph -b$utdatenow -ut$utnow -p0123456789DAttt
                          -eswe -fls -g, -head", $out);
                           
                            // Each line of output data from swetest is exploded into array $row,
                          giving these elements:
                            // 0 = longitude
                            // 1 = speed
                            // planets are index 0 - index (LAST_PLANET)
                            foreach ($out as $key => $line)
                            {
                              $row = explode(',',$line);
                              $longitude1[$key] = $row[0];
                              $speed1[$key] = $row[1];
                            };
                           
                           
                            include("constants.php");   // this is here because we must rename the
                          planet names
                           
                           
                          //add a planet - maybe some code needs to be put here
                           
                           
                          //display right now data
                            echo "<center>";
                           
                            echo "<FONT color='#0000ff' SIZE='3' FACE='Arial'>";
                            echo "<b>Transits</b><br />";
                            echo '<b>On ' . strftime("%A, %B %d, %Y<br>%X (time zone = GMT)</b><br
                          />\n", mktime($inhours, $inmins, $insecs, $inmonth, $inday, $inyear));
                            echo "</font>";
                            echo "</center>";
                           
                            $rx1 = "";
                            for ($i = 0; $i <= SE_TNODE; $i++)
                            {
                              if ($speed1[$i] < 0)
                              {
                                $rx1 .= "R";
                              }
                              else
                              {
                                $rx1 .= " ";
                              }
                            }
                           
                            $rx2 = $rx1;
                           
                          // no need to urlencode unless perhaps magic quotes is ON (??)
                            $ser_L1 = serialize($longitude1);
                            $ser_L2 = serialize($longitude1);
                           
                            echo "<center>";
                            echo "<img border='0'
                          src='chartwheel_right_now_line.php?rx1=$rx1&rx2=$rx2&p1=$ser_L1&p2=$ser_L2'
                          width='730' height='400'>";
                            echo "</center>";
                            echo "<br>";
                           
                          //display right now data
                            echo '<center><table width="40%" cellpadding="0" cellspacing="0"
                          border="0">',"\n";
                           
                            echo '<tr>';
                            echo "<td><font color='#0000ff'><b> Planet </b></font></td>";
                            echo "<td><font color='#0000ff'><b> Longitude </b></font></td>";
                            echo '</tr>';
                           
                            for ($i = 0; $i <= SE_TNODE; $i++)
                            {
                              echo '<tr>';
                              echo "<td>" . $pl_name[$i] . "</td>";
                              echo "<td><font face='Courier New'>" .
                          Convert_Longitude($longitude1[$i]) . " " . Mid($rx1, $i + 1, 1) .
                          "</font></td>";
                              echo '</tr>';
                            }
                           
                            echo '<tr>';
                            echo "<td> &nbsp </td>";
                            echo "<td> &nbsp </td>";
                            echo '</tr>';
                           
                            echo '</table></center>',"\n";
                            echo "<br />";
                           
                           
                            // display right now data - aspect table
                            echo '<center><table width="40%" cellpadding="0" cellspacing="0"
                          border="0">',"\n";
                           
                            echo '<tr>';
                            echo "<td><font color='#0000ff'><b> Planet </b></font></td>";
                            echo "<td><font color='#0000ff'><b> Aspect </b></font></td>";
                            echo "<td><font color='#0000ff'><b> Planet </b></font></td>";
                            echo "<td><font color='#0000ff'><b> Orb </b></font></td>";
                            echo '</tr>';
                           
                            for ($i = 0; $i <= SE_TNODE; $i++)
                            {
                              echo "<tr><td colspan='4'>&nbsp;</td></tr>";
                              for ($j = 0; $j <= SE_TNODE; $j++)
                              {
                                $q = 0;
                                $da = Abs($longitude1[$i] - $longitude1[$j]);
                           
                                if ($da > 180)
                                {
                                  $da = 360 - $da;
                                }
                           
                                // set orb - 8 if Sun or Moon, 6 if not Sun or Moon
                                if ($i == SE_POF Or $j == SE_POF)
                                {
                                  $orb = 3;
                                }
                                elseif ($i == SE_LILITH Or $j == SE_LILITH)
                                {
                                  $orb = 3;
                                }
                                elseif ($i == SE_TNODE Or $j == SE_TNODE)
                                {
                                  $orb = 3;
                                }
                                elseif ($i == SE_VERTEX Or $j == SE_VERTEX)
                                {
                                  $orb = 3;
                                }
                                elseif ($i == 0 Or $i == 1 Or $j == 0 Or $j == 1)
                                {
                                  $orb = 3;
                                }
                                else
                                {
                                  $orb = 3;
                                }
                           
                                // is there an aspect within orb?
                                if ($da <= $orb)
                                {
                                  $q = 1;
                                  $dax = $da;
                                }
                                elseif (($da <= (60 + $orb)) And ($da >= (60 - $orb)))
                                {
                                  $q = 6;
                                  $dax = $da - 60;
                                }
                                elseif (($da <= (90 + $orb)) And ($da >= (90 - $orb)))
                                {
                                  $q = 4;
                                  $dax = $da - 90;
                                }
                                elseif (($da <= (120 + $orb)) And ($da >= (120 - $orb)))
                                {
                                  $q = 3;
                                  $dax = $da - 120;
                                }
                                elseif (($da <= (150 + $orb)) And ($da >= (150 - $orb)))
                                {
                                  $q = 5;
                                  $dax = $da - 150;
                                }
                                elseif ($da >= (180 - $orb))
                                {
                                  $q = 2;
                                  $dax = 180 - $da;
                                }
                           
                                if ($q > 0 And $i != $j)
                                {
                                  // aspect exists
                                  echo '<tr>';
                                  echo "<td>" . $pl_name[$i] . "</td>";
                                  echo "<td>" . $asp_name[$q] . "</td>";
                                  echo "<td>" . $pl_name[$j] . "</td>";
                                  echo "<td>" . sprintf("%.2f", abs($dax)) . "</td>";
                                  echo '</tr>';
                                }
                              }
                            }
                           
                            echo '</table></center>',"\n";
                            echo "<br /><br />";
                           
                            if (EMAIL_enabled == True)
                            {
                              @mail(EMAIL, "Right Now", "");
                            }
                           
                            echo "<br /><br />";
                           
                            include ('footer.html');
                            exit();
                           
                           
                          Function left($leftstring, $leftlength)
                          {
                            return(substr($leftstring, 0, $leftlength));
                          }
                           
                           
                          Function Reduce_below_30($longitude)
                          {
                            $lng = $longitude;
                           
                            while ($lng >= 30)
                            {
                              $lng = $lng - 30;
                            }
                           
                            return $lng;
                          }
                           
                           
                          Function Convert_Longitude($longitude)
                          {
                            $signs = array (0 => 'Ari', 'Tau', 'Gem', 'Can', 'Leo', 'Vir', 'Lib',
                          'Sco', 'Sag', 'Cap', 'Aqu', 'Pis');
                           
                            $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);
                          }
                           
                           
                          Function mid($midstring, $midstart, $midlength)
                          {
                            return(substr($midstring, $midstart-1, $midlength));
                          }
                           
                           
                          Function safeEscapeString($string)
                          {
                          // replace HTML tags '<>' with '[]'
                            $temp1 = str_replace("<", "[", $string);
                            $temp2 = str_replace(">", "]", $temp1);
                           
                          // but keep <br> or <br />
                          // turn <br> into <br /> so later it will be turned into ""
                          // using just <br> will add extra blank lines
                            $temp1 = str_replace("[br]", "<br />", $temp2);
                            $temp2 = str_replace("[br /]", "<br />", $temp1);
                           
                            if (get_magic_quotes_gpc())
                            {
                              return $temp2;
                            }
                            else
                            {
                              return mysql_escape_string($temp2);
                            }
                          }
                           
                          ?>
                          Wie es aussieht wenns funktioniert ist hier zu sehen:

                          [COLOR=#22229c]http://www.astrowin.org/astrology_scripts/right_now.php[/COLOR]


                          Grüsslis
                          Futurefee
                          Zuletzt geändert von futurefee; 21.12.2009, 23:28.

                          Kommentar


                          • #14
                            Geschafft

                            Problem ist gelöst. Hab einen Hoster gefunden wo es läuft. Danke euch für die Unterstützung und sorry, wenn ich euch genervt habe.
                            Wünsche allen nen guten Rutsch.

                            Futurefee

                            Kommentar


                            • #15
                              Zitat von futurefee Beitrag anzeigen
                              Jetzt suche ich dringend einen Hoster wo es ausgeführt werden kann. Falls jemand einen Tip hat, würde ich mich drüber freuen. Geb ja nicht so schnell auf.
                              Ich würde da mal bei Webhosting - Webspace - Domain - SSL-Zertifikate von PixelX nachfragen.

                              Ok - da warst du schneller.
                              Zuletzt geändert von ; 23.12.2009, 14:39. Grund: Vorposting war schneller

                              Kommentar

                              Lädt...
                              X