Redio Webmasterforum ► Redio  ► Redio Meinung ► [HVS] Patcher

« vorheriges nächstes »
Seiten: 1 [2] Drucken
Autor Thema: [HVS] Patcher  (Gelesen 1225 mal)
PromyLOPh
Administrator
Redio-Held
*****

Karma: 176
Beiträge: 1.818


PromyLOPh@jabber.ccc.de
Profil anzeigen WWW
« Antworten #15 am: 11. Januar 2010, 17:09:38 »

Wo der Parser schonmal da ist:
Wie wäre es, auch Diffs anwenden zu können, die nicht in der Bibliothek sind?

(Dazu könnte man z.B. bei .diff oder .patch eine zusätzliche Aktion einbauen.)
Geht im Prinzip schon, aber es war bis eben keine Oberfläche vorhanden, um das zu machen. Wenn du die vorhandenen Modifikationen ansiehst, werden jetzt einfach alle *.diff und *.patch-Dateien im ausgewählten Ordner angezeigt. Nicht die beste Lösung, aber mit fünf Zeilen unschlagbar kurz. Für alles andere ist ein wenig "Refactoring" nötig, sonst wird das ziemlich chaotisch :/
Gespeichert

Revo
Redio Unteroffizier
*****

Karma: 8
Beiträge: 308

385231655 nifiek@jabber.ccc.de
Profil anzeigen
« Antworten #16 am: 11. Januar 2010, 17:36:48 »

Thx. Das ist schonmal was.

lG
Revo
Gespeichert
Revo
Redio Unteroffizier
*****

Karma: 8
Beiträge: 308

385231655 nifiek@jabber.ccc.de
Profil anzeigen
« Antworten #17 am: 17. Juli 2010, 14:25:41 »

Ich habe grade auf die neuste Drupal Version aktualisiert.
Mit 6.17 funktioniert der alte Patch nicht mehr vollständig. Hier die neue Version:

Code:
author: revo
software: drupal
version: 6.17
description: ini_set-Warnungen unterdruecken, fsockopen durch curl ersetzen
lastchange: 2010-07-17

--- includes/bootstrap.inc Di Dez 22 18:12:38 2009
+++ includes/bootstrap.inc Di Dez 22 17:57:29 2009
@@ -387,7 +387,7 @@
   // Per RFC 2109, cookie domains must contain at least one dot other than the
   // first. For hosts such as 'localhost' or IP Addresses we don't set a cookie domain.
   if (count(explode('.', $cookie_domain)) > 2 && !is_numeric(str_replace('.', '', $cookie_domain))) {
-    ini_set('session.cookie_domain', $cookie_domain);
+    @ini_set('session.cookie_domain', $cookie_domain);
   }
   session_name('SESS'. md5($session_name));
 }
--- includes/common.inc Sa Jul 17 14:18:00 2010
+++ includes/common.inc Sa Jul 17 14:18:00 2010
@@ -460,111 +460,93 @@
     return $result;
   }

-  switch ($uri['scheme']) {
-    case 'http':
-    case 'feed':
-      $port = isset($uri['port']) ? $uri['port'] : 80;
-      $host = $uri['host'] . ($port != 80 ? ':'. $port : '');
-      $fp = @fsockopen($uri['host'], $port, $errno, $errstr, 15);
-      break;
-    case 'https':
-      // Note: Only works for PHP 4.3 compiled with OpenSSL.
-      $port = isset($uri['port']) ? $uri['port'] : 443;
-      $host = $uri['host'] . ($port != 443 ? ':'. $port : '');
-      $fp = @fsockopen('ssl://'. $uri['host'], $port, $errno, $errstr, 20);
-      break;
-    default:
-      $result->error = 'invalid schema '. $uri['scheme'];
+  // Anstatt des auf diesen Block folgenden switch Konstruktes, nur dieser Test
+  if(!in_array($uri['scheme'], array('http', 'https'))) {
+   $result->error = 'invalid schema '. $uri['scheme'];
       $result->code = -1003;
       return $result;
   }

-  // Make sure the socket opened properly.
-  if (!$fp) {
-    // When a network error occurs, we use a negative number so it does not
-    // clash with the HTTP status codes.
-    $result->code = -$errno;
-    $result->error = trim($errstr);
-
-    // Mark that this request failed. This will trigger a check of the web
-    // server's ability to make outgoing HTTP requests the next time that
-    // requirements checking is performed.
-    // @see system_requirements()
+  // Curl-Anfrage erzeugen
+  $ch = curl_init();
+  curl_setopt($ch, CURLOPT_URL, $url);
+  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
+  curl_setopt($ch, CURLOPT_HEADER, 1);
+  curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
+  curl_setopt($ch, CURLOPT_TIMEOUT, 15);
+
+  // Location-Headern folgen
+  // Edit:
+  // Wird doch wieder rekursiv gelöst, weil es Probleme mit curl und dem Safe-Mode
+  // auf Redio gibt.
+  /* if($retry) {
+    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
+    curl_setopt($ch, CURLOPT_MAXREDIRS, $retry);
+  } */
+
+  // HTTP-Anfragen Methode setzen
+  switch(strtolower($method)) {
+    case 'get':
+   curl_setopt($ch, CURLOPT_HTTPGET, 1);
+   break;
+ case 'post':
+   curl_setopt($ch, CURLOPT_POST, 1);
+   curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
+   break;
+ case 'put':
+   // Todo: Unterstützung für Put-Anfragen - oder ist die überhaupt nötig?
+   $result->error = 'Fixme: HTTP-Put Anfragen werden vom Redio-Diff im Moment nicht unterstützt.';
+   $result->code = -1003;
+   curl_close($ch);
+   return $result;
+  }
+
+  // Basic Authentication?
+  if (isset($uri['user'])) {
+    curl_setopt($ch, CURLOPT_USERPWD, $uri['user'] . (!empty($uri['pass']) ? ":". $uri['pass'] : ''));
+  }
+
+  // User-Agent Header
+  if (is_string($db_prefix) && preg_match("/^simpletest\d+$/", $db_prefix, $matches)) {
+    // If the database prefix is being used by SimpleTest to run the tests in a copied
+    // database then set the user-agent header to the database prefix so that any
+    // calls to other Drupal pages will run the SimpleTest prefixed database. The
+    // user-agent is used to ensure that multiple testing sessions running at the
+    // same time won't interfere with each other as they would if the database
+    // prefix were stored statically in a file or database variable.
+    curl_setopt($ch, CURLOPT_USERAGENT, $matches[0]);
+  } else {
+    curl_setopt($ch, CURLOPT_USERAGENT, 'Drupal (+http://drupal.org/)');
+  }
+
+  // Weitere Header
+  if(count($headers)) {
+    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
+  }
+
+  // In der nicht-Curl wurde hier die gesamte generierte HTTP-Anfrage eingefügt
+  // Ich hoffe es tut nicht weh? Fixme: Das prüfen!
+  $result->request = '';
+
+  // Anfrage ausführen
+  $response = curl_exec($ch);
+  if(!$response) {
+    $result->code = curl_errno($ch);
+    $result->error = curl_error($ch);
+    curl_close($ch);
     variable_set('drupal_http_request_fails', TRUE);
-
     return $result;
   }
-
-  // Construct the path to act on.
-  $path = isset($uri['path']) ? $uri['path'] : '/';
-  if (isset($uri['query'])) {
-    $path .= '?'. $uri['query'];
-  }
-
-  // Create HTTP request.
-  $defaults = array(
-    // RFC 2616: "non-standard ports MUST, default ports MAY be included".
-    // We don't add the port to prevent from breaking rewrite rules checking the
-    // host that do not take into account the port number.
-    'Host' => "Host: $host",
-    'User-Agent' => 'User-Agent: Drupal (+http://drupal.org/)',
-  );
-
-  // Only add Content-Length if we actually have any content or if it is a POST
-  // or PUT request. Some non-standard servers get confused by Content-Length in
-  // at least HEAD/GET requests, and Squid always requires Content-Length in
-  // POST/PUT requests.
-  $content_length = strlen($data);
-  if ($content_length > 0 || $method == 'POST' || $method == 'PUT') {
-    $defaults['Content-Length'] = 'Content-Length: '. $content_length;
-  }
-
-  // If the server url has a user then attempt to use basic authentication
-  if (isset($uri['user'])) {
-    $defaults['Authorization'] = 'Authorization: Basic '. base64_encode($uri['user'] . (!empty($uri['pass']) ? ":". $uri['pass'] : ''));
-  }
-
-  // If the database prefix is being used by SimpleTest to run the tests in a copied
-  // database then set the user-agent header to the database prefix so that any
-  // calls to other Drupal pages will run the SimpleTest prefixed database. The
-  // user-agent is used to ensure that multiple testing sessions running at the
-  // same time won't interfere with each other as they would if the database
-  // prefix were stored statically in a file or database variable.
-  if (is_string($db_prefix) && preg_match("/^simpletest\d+$/", $db_prefix, $matches)) {
-    $defaults['User-Agent'] = 'User-Agent: ' . $matches[0];
-  }
-
-  foreach ($headers as $header => $value) {
-    $defaults[$header] = $header .': '. $value;
-  }
-
-  $request = $method .' '. $path ." HTTP/1.0\r\n";
-  $request .= implode("\r\n", $defaults);
-  $request .= "\r\n\r\n";
-  $request .= $data;
-
-  $result->request = $request;
-
-  fwrite($fp, $request);
-
-  // Fetch response.
-  $response = '';
-  while (!feof($fp) && $chunk = fread($fp, 1024)) {
-    $response .= $chunk;
-  }
-  fclose($fp);
-
-  // Parse response.
+  curl_close($ch);
+
+  // Parse response
   list($split, $result->data) = explode("\r\n\r\n", $response, 2);
   $split = preg_split("/\r\n|\n|\r/", $split);

-  list($protocol, $code, $status_message) = explode(' ', trim(array_shift($split)), 3);
-  $result->protocol = $protocol;
-  $result->status_message = $status_message;
-
+  list($protocol, $code, $text) = explode(' ', trim(array_shift($split)), 3);
   $result->headers = array();

-  // Parse headers.
+  // Parse headers
   while ($line = trim(array_shift($split))) {
     list($header, $value) = explode(':', $line, 2);
     if (isset($result->headers[$header]) && $header == 'Set-Cookie') {
@@ -598,16 +580,15 @@
     case 302: // Moved temporarily
     case 307: // Moved temporarily
       $location = $result->headers['Location'];
-
       if ($retry) {
         $result = drupal_http_request($result->headers['Location'], $headers, $method, $data, --$retry);
         $result->redirect_code = $result->code;
       }
       $result->redirect_url = $location;
-
       break;
+
     default:
-      $result->error = $status_message;
+      $result->error = $text;
   }

   $result->code = $code;
--- sites/default/default.settings.php Di Dez 22 18:13:48 2009
+++ sites/default/default.settings.php Di Dez 22 17:57:57 2009
@@ -134,18 +134,18 @@
  * settings are used there. Settings defined here should not be
  * duplicated there so as to avoid conflict issues.
  */
-ini_set('arg_separator.output',     '&');
-ini_set('magic_quotes_runtime',     0);
-ini_set('magic_quotes_sybase',      0);
-ini_set('session.cache_expire',     200000);
-ini_set('session.cache_limiter',    'none');
-ini_set('session.cookie_lifetime',  2000000);
-ini_set('session.gc_maxlifetime',   200000);
-ini_set('session.save_handler',     'user');
-ini_set('session.use_cookies',      1);
-ini_set('session.use_only_cookies', 1);
-ini_set('session.use_trans_sid',    0);
-ini_set('url_rewriter.tags',        '');
+@ini_set('arg_separator.output',     '&');
+@ini_set('magic_quotes_runtime',     0);
+@ini_set('magic_quotes_sybase',      0);
+@ini_set('session.cache_expire',     200000);
+@ini_set('session.cache_limiter',    'none');
+@ini_set('session.cookie_lifetime',  2000000);
+@ini_set('session.gc_maxlifetime',   200000);
+@ini_set('session.save_handler',     'user');
+@ini_set('session.use_cookies',      1);
+@ini_set('session.use_only_cookies', 1);
+@ini_set('session.use_trans_sid',    0);
+@ini_set('url_rewriter.tags',        '');

 /**
  * If you encounter a situation where users post a large amount of text, and
--- .htaccess Mi Dez 23 21:08:16 2009
+++ .htaccess Mi Dez 23 21:07:56 2009
@@ -77,7 +77,7 @@
 </IfModule>

 # Various rewrite rules.
-<IfModule mod_rewrite.c>
+#<IfModule mod_rewrite.c>
   RewriteEngine on

   # If your site can be accessed both with and without the 'www.' prefix, you
@@ -111,6 +111,6 @@
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_URI} !=/favicon.ico
   RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
-</IfModule>
+#</IfModule>

 # $Id: .htaccess,v 1.90.2.4 2009/12/07 12:00:40 goba Exp $
--- update.php Mi Dez 23 21:09:12 2009
+++ update.php Di Dez 22 21:50:00 2009
@@ -561,7 +561,7 @@

 // Some unavoidable errors happen because the database is not yet up-to-date.
 // Our custom error handler is not yet installed, so we just suppress them.
-ini_set('display_errors', FALSE);
+@ini_set('display_errors', FALSE);

 require_once './includes/bootstrap.inc';

@@ -613,7 +613,7 @@

 // Turn error reporting back on. From now on, only fatal errors (which are
 // not passed through the error handler) will cause a message to be printed.
-ini_set('display_errors', TRUE);
+@ini_set('display_errors', TRUE);

 // Access check:
 if (!empty($update_free_access) || $user->uid == 1) {

Laut http://redio.info/patches/list.json liegt die alte Version unter http://www.redio.info/patches/data/drupal_6.15_fsockopen_ini_set.patch.

Wegen den Zeilenumbrüchen hab ich den Patch auch nochmal angehängt.

lG
Revo
Gespeichert
PromyLOPh
Administrator
Redio-Held
*****

Karma: 176
Beiträge: 1.818


PromyLOPh@jabber.ccc.de
Profil anzeigen WWW
« Antworten #18 am: 17. Juli 2010, 20:59:08 »

Da sich wahrscheinlich sonst keiner von den Admins darum kümmert habe ich den Patch mal hochgeladen... Danke.
Gespeichert

Seiten: 1 [2] Drucken 
« vorheriges nächstes »
Gehe zu: