Moin,
parallel zu Markitup ist auch RexSEO jetzt komplett incl. Wiki, Tickets & DLs zu GitHub umgezogen:
https://github.com/gn2netwerk/rexseo sprich:
- Wiki: https://github.com/gn2netwerk/rexseo/wiki
- Issues: https://github.com/gn2netwerk/rexseo/issues
- DLs: https://github.com/gn2netwerk/rexseo/downloads
Auch hier: das SVN repo an sich bleibt erstmal bestehen und ist über die gewohnte URL erriechbar, die bisherigen Sections für Tickets, etc. @ GN2 Redmine sind aber abgeschaltet..
Umfrage zu den "neue Version" Meldungen
Aus Beobachtung der DL Zahlen nach einem neuen Release weiß ich, daß diese Meldung doch erstaunlich viele User anspricht.. zumindest mal dazu das neue Release runterzuladen. Da das ganze technisch an Redmine gebunden ist welches nun vom Tisch ist: Schlimm wenn die update Meldungen einfach rausfliegen? Ich könnt das zwar für GitHub umstricken, aber da is mir grad nicht danach, d.h. würds dann eher einfach weglassen.. ;->
lg,Jan
Hallo,
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.
Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
[RexSEO] goes GitHub..
vg, Jan
Re: [RexSEO] goes GitHub..
-1 dafür.
Ich liebe die Update Benachrichtigung.
Ansonsten +1 für den Rest!
Ich liebe die Update Benachrichtigung.
Ansonsten +1 für den Rest!
Re: [RexSEO] goes GitHub..
mift.. ;-> na gut, wird aber noch n paar tage dauern, weil die verfügbare GitHub Api PHP Klasse bis dato nur API2 kann, und ich dafür aber API3 brauch -> zu Fuß das ganze per curl etc.. 8-}Hirbod hat geschrieben:Ich liebe die Update Benachrichtigung.
vg, Jan
Re: [RexSEO] goes GitHub..
Moin,
es gibt ein neue Version 1.4.280: https://github.com/downloads/gn2netwerk ... .4.280.zip
Changelog: https://github.com/gn2netwerk/rexseo/wi ... -Changelog
es gibt ein neue Version 1.4.280: https://github.com/downloads/gn2netwerk ... .4.280.zip
Changelog: https://github.com/gn2netwerk/rexseo/wi ... -Changelog
vg, Jan
Re: [RexSEO] goes GitHub..
Hi Jan,
du hast das ganze neue Version-Ding ja mit CURL gemacht. Würde ich nicht empfehlen, ist nicht überall installiert, vor allem nicht default.
Nimm doch lieber Gregor Harlans Socket-Class dafür, dies fuktioniert wohl auf jeder PHP-Umgebung. Hier die 5+ kompatibele Version. (Funzt auch mit 5.3+)
Und abholen kannste alles so:
(wenn du Dateien abholst und speichern willst (eq zu file_get_contents, nur ohne Limits )
In dem Fall $path setzen.
Und wenn du nur nen String, Array oder JSON verarbeiten willst, brauchste nix schreiben, sondern nur abholen:
In $file_output haste dann wohl Versionsnummer oder was auch immer.
LG
Hirbod
du hast das ganze neue Version-Ding ja mit CURL gemacht. Würde ich nicht empfehlen, ist nicht überall installiert, vor allem nicht default.
Nimm doch lieber Gregor Harlans Socket-Class dafür, dies fuktioniert wohl auf jeder PHP-Umgebung. Hier die 5+ kompatibele Version. (Funzt auch mit 5.3+)
Code: Alles auswählen
<?php
/**
* Class for sockets
*
* @author gharlan
*/
class rex_socket
{
private $prefix;
private $host;
private $path;
private $port;
private $timeout;
private $headers = array();
private $fp;
private $data;
private $files;
private $chunked = false;
private $chunkPos = 0;
private $chunkLength = 0;
private $status;
private $statusMessage;
private $header;
private $body;
public function __construct($host, $path = '/', $port = 80, $prefix = '', $timeout = 15)
{
$this->prefix = $prefix;
$this->host = $host;
$this->path = $path;
$this->port = $port;
$this->timeout = $timeout;
}
static public function createByUrl($url, $timeout = 15)
{
$parts = parse_url($url);
if(!isset($parts['host']))
{
throw new rex_socket_exception('It isn\'t possible to parse the URL "'. $url .'"!');
}
$host = $parts['host'];
$path = (isset($parts['path']) ? $parts['path'] : '/')
. (isset($parts['query']) ? '?'. $parts['query'] : '')
. (isset($parts['fragment']) ? '#'. $parts['fragment'] : '');
$port = 80;
$prefix = '';
if(isset($parts['scheme']))
{
$supportedProtocols = array('http', 'https');
if(!in_array($parts['scheme'], $supportedProtocols))
{
throw new rex_socket_exception('Unsupported protocol "'. $parts['scheme'] .'". Supported protocols are '. implode(', ', $supportedProtocols). '.');
}
if($parts['scheme'] == 'https')
{
$prefix = 'ssl://';
$port = 443;
}
}
$port = isset($parts['port']) ? $parts['port'] : $port;
return new self($host, $path, $port, $prefix, $timeout);
}
public function addHeader($key, $value)
{
$this->headers[$key] = $value;
}
public function addBasicAuthorization($user, $password)
{
$this->addHeader('Authorization', 'Basic '. base64_encode($user .':'. $password));
}
public function doGet()
{
$this->doRequest('GET');
}
public function doPost($data = '', array $files = array())
{
if(is_array($data) && !empty($files))
{
$this->data = $data;
$this->files = $files;
$data = 'buildMultipart';
}
else
{
if(is_array($data) && !is_callable($data))
$data = http_build_query($data);
$this->addHeader('Content-Type', 'application/x-www-form-urlencoded');
}
$this->doRequest('POST', $data);
}
public function doDelete()
{
$this->doRequest('DELETE');
}
public function doRequest($method, $data = '')
{
if(!is_string($data) && !is_callable($data))
{
throw new rex_socket_exception(sprintf('Expecting $data to be a string or a callable, but %s given!', gettype($data)));
}
if(!($this->fp = @fsockopen($this->prefix . $this->host, $this->port, $errno, $errstr)))
{
throw new rex_socket_exception($errstr .' ('. $errno .')');
}
stream_set_timeout($this->fp, $this->timeout);
$eol = "\r\n";
$headers = array();
$headers[] = strtoupper($method) .' '. $this->path .' HTTP/1.1';
$headers[] = 'Host: '. $this->host;
$headers[] = 'Connection: Close';
foreach($this->headers as $key => $value)
{
$headers[] = $key .': '. $value;
}
foreach($headers as $header)
{
fwrite($this->fp, str_replace(array("\r", "\n"), '', $header) . $eol);
}
if(is_callable($data))
{
call_user_func($data, $this->fp);
}
elseif(is_string($data) && method_exists($this, $data))
{
$this->$data();
}
else
{
fwrite($this->fp, 'Content-Length: '. strlen($data) . $eol);
fwrite($this->fp, $eol . $data);
}
$this->headers = array();
$meta = stream_get_meta_data($this->fp);
if($meta['timed_out'])
{
throw new rex_socket_exception('Timeout!');
}
while(!feof($this->fp) && strpos($this->header, "\r\n\r\n") === false)
{
$this->header .= fgets($this->fp);
}
if(preg_match('@^HTTP/1\.\d ([0-9]{3}) (\V*)@', $this->getHeader(), $matches))
{
$this->status = intval($matches[1]);
$this->statusMessage = $matches[2];
}
$this->chunked = stripos($this->header, 'transfer-encoding: chunked') !== false;
}
private function buildMultipart()
{
$fp = $this->fp;
$data = $this->data;
$files = $this->files;
$boundary = '----------6n2Yd9bk2liD6piRHb5xF6';
$eol = "\r\n";
fwrite($fp, 'Content-Type: multipart/form-data; boundary='. $boundary . $eol);
$dataFormat = '--'. $boundary . $eol . 'Content-Disposition: form-data; name="%s"'. $eol . $eol;
$fileFormat = '--'. $boundary . $eol . 'Content-Disposition: form-data; name="%s"; filename="%s"'. $eol .'Content-Type: %s'. $eol . $eol;
$end = '--'. $boundary .'--'. $eol;
$length = 0;
$temp = explode('&', http_build_query($data, '', '&'));
$data = array();
$partLength = strlen(sprintf($dataFormat, '') . $eol);
foreach($temp as $t)
{
list($key, $value) = array_map('urldecode', explode('=', $t, 2));
$data[$key] = $value;
$length += $partLength + strlen($key) + strlen($value);
}
$partLength = strlen(sprintf($fileFormat, '', '', '') . $eol);
foreach($files as $key => $file)
{
$length += $partLength + strlen($key) + strlen(basename($file['path'])) + strlen($file['type']) + filesize($file['path']);
}
$length += strlen($end);
fwrite($fp, 'Content-Length: '. $length . $eol . $eol);
foreach($data as $key => $value)
{
fwrite($fp, sprintf($dataFormat, $key) . $value . $eol);
}
foreach($files as $key => $file)
{
fwrite($fp, sprintf($fileFormat, $key, basename($file['path']), $file['type']));
$file = fopen($file['path'], 'rb');
while(!feof($file))
{
fwrite($fp, fread($file, 1024));
}
fclose($file);
fwrite($fp, $eol);
}
fwrite($fp, $end);
}
public function getStatus()
{
return $this->status;
}
public function getStatusMessage()
{
return $this->statusMessage;
}
public function getHeader($key = null, $default = null)
{
if($key === null)
{
return $this->header;
}
$key = strtolower($key);
if(isset($this->headers[$key]))
{
return $this->headers[$key];
}
if(preg_match('@^'. preg_quote($key, '@') .': (\V*)@im', $this->header, $matches))
{
return $this->headers[$key] = $matches[1];
}
return $this->headers[$key] = $default;
}
public function getBufferedBody($length = 1024)
{
if(feof($this->fp))
{
return false;
}
if($this->chunked)
{
if($this->chunkPos == 0)
{
$this->chunkLength = hexdec(fgets($this->fp));
if($this->chunkLength == 0)
{
return false;
}
}
$pos = ftell($this->fp);
$buf = fread($this->fp, min($length, $this->chunkLength - $this->chunkPos));
$this->chunkPos += ftell($this->fp) - $pos;
if($this->chunkPos >= $this->chunkLength)
{
fgets($this->fp);
$this->chunkPos = 0;
$this->chunkLength = 0;
}
return $buf;
}
else
{
return fread($this->fp, $length);
}
}
public function getBody()
{
if($this->body === null)
{
while(($buf = $this->getBufferedBody()) !== false)
{
$this->body .= $buf;
}
}
return $this->body;
}
public function writeBodyTo($resource)
{
$success = true;
while($success && ($buf = $this->getBufferedBody()) !== false)
{
$success = (boolean) fwrite($resource, $buf);
}
return $success;
}
public function __destruct()
{
if(is_resource($this->fp))
{
fclose($this->fp);
}
}
}
class rex_socket_exception extends Exception
{
public function __construct($message, $code = E_USER_ERROR)
{
parent::__construct($message, $code);
}
}
(wenn du Dateien abholst und speichern willst (eq zu file_get_contents, nur ohne Limits )
In dem Fall $path setzen.
Code: Alles auswählen
try {
$socket = rex_socket::createByUrl("http://www.download.de/datei.zip");
$socket->doGet();
$res = fopen($path, 'w');
$file_output = $socket->writeBodyTo($res);
} catch (rex_socket_exception $e) {
// fehlermeldung:
echo rex_warning($e->getMessage());
}
Und wenn du nur nen String, Array oder JSON verarbeiten willst, brauchste nix schreiben, sondern nur abholen:
Code: Alles auswählen
try {
$socket = rex_socket::createByUrl("http://www.url.de/path/zu/irgendwas");
$socket->doGet();
$file_output = $socket->getBody();
} catch (rex_socket_exception $e) {
// fehlermeldung:
echo rex_warning($e->getMessage());
}
LG
Hirbod
Re: [RexSEO] goes GitHub..
thx für die schnipsel.. 'ere it is: https://github.com/gn2netwerk/rexseo/co ... 4c8eb7ee3a
vg, Jan
Re: [RexSEO] goes GitHub..
Neue DL Version 1.4.283 mit n paar bugfixes: https://github.com/downloads/gn2netwerk ... .4.283.zip
Release notes: https://github.com/gn2netwerk/rexseo/wi ... -Changelog
Release notes: https://github.com/gn2netwerk/rexseo/wi ... -Changelog
vg, Jan
Re: [RexSEO] goes GitHub..
Nice. Was wuerdest du davon halten einen eigenen Updatemech. mit der Socket Class zu bauen? Einfach zusaerzlich nen Link Update iwo rein und dann zip-file abholen, entpacken und Daten ueberschreiben? Nur als Idee..
Re: [RexSEO] goes GitHub..
Nope.. ich will nicht noch mehr Komplexität in RexSEO reinstricken. Eher das Gegenteil.. z.b. soll das ganze Redirects Managament künftig als Plugin ausgelagert werden, einfach damit der Core von RexSEO wieder schlanker wird. Außerdem ist sowas imho Aufgabe des frameworks, bzw. eines Addons.. und das gibt es ja. ;)Hirbod hat geschrieben:Was wuerdest du davon halten einen eigenen Updatemech. mit der Socket Class zu bauen?
vg, Jan
Re: [RexSEO] goes GitHub..
FYI: Aktuelle RexSEO dev Version (1.4.284 dev):
* Neuer EP REXSEO_SPECIAL_CHARS ermöglicht es die Zeichenersetzung aus der Redaxo .lang Datei zu ändern.. d.h. man kann z.b. clang spezifische Zeichenersetzungen machen.
* An entscheidenden Stellen wird gecheckt ob die RexSEO Metainfo-Felder existieren, und bei Bedarf nachinstalliert/gefixt.. das sollte die gelegentlich auftretenden "RexSEO macht keinen rewrite" Fälle aus der Welt schaffen.
* notices beim hinzufügen von neuen Sprachen gefixt
Die Version läuft als "dev" weil ich grad keine Zeit habe ausgiebig zu testen.. ich denke zwar es paßt alles, aber mei.. daher: Version gibts erstmal nicht als DL, man muß einfach direkt nen DL bei Hithub von der files Seite ziehen.
feedback welcome.. echte Fehler am besten gleich @ Github melden
* Neuer EP REXSEO_SPECIAL_CHARS ermöglicht es die Zeichenersetzung aus der Redaxo .lang Datei zu ändern.. d.h. man kann z.b. clang spezifische Zeichenersetzungen machen.
* An entscheidenden Stellen wird gecheckt ob die RexSEO Metainfo-Felder existieren, und bei Bedarf nachinstalliert/gefixt.. das sollte die gelegentlich auftretenden "RexSEO macht keinen rewrite" Fälle aus der Welt schaffen.
* notices beim hinzufügen von neuen Sprachen gefixt
Die Version läuft als "dev" weil ich grad keine Zeit habe ausgiebig zu testen.. ich denke zwar es paßt alles, aber mei.. daher: Version gibts erstmal nicht als DL, man muß einfach direkt nen DL bei Hithub von der files Seite ziehen.
feedback welcome.. echte Fehler am besten gleich @ Github melden
vg, Jan