PHP

Il modulo Link Image Field con Drupal 6 e php 5.3: il widget per l'inserimento delle immagini non viene mostrato

Il modulo Link Image Field, versione 6.x-1.0-beta2 ha un bug con php 5.3 per il quale il widget per l'upload dell'immagine non viene mostrato nel form del nodo. Il bug ha a che fare con la modifica del passaggio dei parametri a funzione in php 5.3 rispetto a php 5.2.

Se si attiva la visualizzazione degli  errori php il seguente warning è mostrato che impedisce la corretta visualizzazione del widget: "warning: Parameter 1 to theme_linkimagefield_widget() expected to be a reference, value given".

Per risolvere il problema è possibile applicare la seguente patch:

diff --git a/linkimagefield_widget.inc b/linkimagefield_widget.inc
index 2e484c3..4e47f56 100644
--- a/linkimagefield_widget.inc
+++ b/linkimagefield_widget.inc
@@ -105,10 +105,13 @@ function linkimagefield_widget_process($element, $edit, &$form_state, $form) {
 /**
  * FormAPI theme function. Theme the output of an image field.
  *
- * @param arrayreference $element
+ * @param array $element
+ *   An associative array containing the properties of the element.
+ *
  * @return string
+ *   A string representing the form element.
  */
-function theme_linkimagefield_widget(&$element) {
+function theme_linkimagefield_widget($element) {
   drupal_add_css(drupal_get_path('module', 'imagefield') .'/imagefield.css');
   return theme('form_element', $element, $element['#children']);
 }

Reference:

Il modulo MimeDetect di Drupal 6 con php 5.3

Il modulo MimeDetect di drupal è un modlo di servizio che consente a drupal e agli altri moduli installati di determinare il tipo di un file caricato sul server.

Con php 5.3 questo modulo non funziona correttamente. Se si controlla il resoconto sullo stato di drupal si potrà verificare che il modulo MimeDetect riporta il seguente errore: "Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module. (Currently using Mime type detection PHP Fileinfo Extension)".

Infatti con la versione 5.3.11 (e 5.4.1) di php il formato del file magic (un database di regole per la determinazione del tipo di file) è stato modificato, quindi se si cerca di caricare un magic file esterno tale caricamento fallisce. Per ovviare a ciò è possibile utilizzare il magic file integrato all'interno di php stesso.

Per fare ciò è sufficiente non specificare il secondo parametro alla funzione finfo_open. Sapendo ciò si potrà applicare la seguente patch al modulo MimeDetect e il tutto dovrebbe tornare a funzionare correttamente:

 

diff --git a/mimedetect.install b/mimedetect.install
index 4228d19..3e6992d 100644
--- a/mimedetect.install
+++ b/mimedetect.install
@@ -27,7 +27,7 @@ function mimedetect_requirements($phase) {
 
   if (extension_loaded('fileinfo')) {
     $requirement['value'] = $t('PHP Fileinfo Extension');
-    if (!$finfo = @finfo_open(FILEINFO_MIME, variable_get('mimedetect_magic', drupal_get_path('module', 'mimedetect') .'/magic'))) {
+    if (!$finfo = @finfo_open(FILEINFO_MIME)) {
       $requirement['description'] = $t('Fileinfo could not load the magic file. It could be corrupted. Try reinstalling the magic file distributed with the MimeDetect module.');
       $requirement['severity'] = REQUIREMENT_ERROR;
     }
diff --git a/mimedetect.module b/mimedetect.module
index b8fc7f4..a5f64b4 100644
--- a/mimedetect.module
+++ b/mimedetect.module
@@ -57,7 +57,7 @@ function mimedetect_mime($file) {
   // Try to use the fileinfo extension first.
   if (extension_loaded('fileinfo')) {
     static $finfo = FALSE;
-    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME, $magic_file)) {
+    if ($finfo || $finfo = @finfo_open(FILEINFO_MIME)) {
       $mime = finfo_file($finfo, drupal_realpath($file->uri));
     }
   }

UPDATE:

La patch sopra può essere evitata aggiungendo la seguente riga al file settings.php:

$conf['mimedetect_magic'] = '';

In questo modo si ottiene lo stesso effetto di caricaare il file magic di default distribuito con php

 

Riferimenti:

Errore CGI - L'applicazione CGI specificata non ha restituito un insieme completo di intestazioni HTTP con PHP in modalità FastCGI su Windows 2003 Server (IIS 6)

Su alcuni dei nostri server si è verifcato l'errore in oggetto.

Intermittentemente il web server rispondeva con una pagina il cui contenuto era:

Errore CGI

L'applicazione CGI specificata non ha restituito un insieme completo di intestazioni HTTP.

Il problema è stato risolto disabilitando l'estensione wincache di PHP ossia modificando il file php.ini da

extension=php_wincache.dll

a

;extension=php_wincache.dll

 

$_SERVER['DOCUMENT_ROOT'] non definita con PHP in modalità FastCGI su Windows 2003 Server (IIS 6)

Se si installa PHP in modalità FastCGI su Windows 2003 (IIS 6) la variabile $_SERVER['DOCUMENT_ROOT'] non sarà disponibile nell'ambiente PHP.

Per ovviare a questo incoveniente sarà sufficiente eseguire le operazioni sotto:

Creare il file fastcgi.php con il seguente contenuto:

<?php
if(!isset($_SERVER["DOCUMENT_ROOT"]) || empty($_SERVER["DOCUMENT_ROOT"])) {
    $_SERVER["DOCUMENT_ROOT"] = substr($_SERVER['PATH_TRANSLATED'], 0, strlen($_SERVER['SCRIPT_NAME']) * - 1);
}    

(Notare la mancanza del tag di chiusura PHP. Questo assicura che tutto il codice è interpretato come PHP e non c'è output di new line o spazi).

Salvare il file nella cartella di installazione di PHP. Se si è installato PHP utlizzando la Web Platform di Microsoft allora la cartella predefinita sarà: C:\Programmi\PHP. Supponiamo sia questo il caso e salviamolo lì.

Configurare la direttiva auto_prepend_file nel php.ini nel seguente modo:

auto_prepend_file = C:\Programmi\PHP\fastcgi.php

Adesso gli script PHP potranno utilizzare la variabile $_SERVER['DOCUMENT_ROOT'] senza problemi.

Drupal, simplenews e il problema del Return-Path

I server di posta Unix/Linux, come postfix e sendmail, sovrascrivono l'header 'Return-Path' inviato dalla funzione mail() di PHP, utilizzando l'indirizzo e-mail con il nome dell'utente sotto il quale viene eseguito il web server Apache. Se, ad esempio, il web server è eseguito da un utente il cui nome è apache ed il nome del server su cui è ospitato è webserver.example.com, allora l'indirizzo email utilizzato dal mail server per il Return-Path sarà, apache@webserver.example.com, indipendentemente da ciò che può essere passato alla funzione mail().

Questa sovrascrittura fa si che le bounce mail, ossia le mail di ritorno generate da eventuali errori di consegna dei messaggi, vengano inviate all'indirizzo suddetto.

Per ovviare a tale problema, si può utilizzare un parametro aggiuntivo della funziona mail(), esattamente il quinto parametro, passando a quest'ultima l' opzione -f seguita dall'indirizzo di email al quale vogliono essere recapitate le mail di ritorno, ossia il Return-Path reale.

Questo approccio è usato da modulo Drupal Return-Path, sovrascrivendo funzione drupal_mail, e funziona correttamente.

Il modulo Mime Mail, però, non utilizza la funzione drupal_mail per l'invio di mail, ma utilizza un proprio mail engine interno che, a sua volta, utillizza direttamente la funzione mail() di PHP.

In particolare il modulo Mime Mail è utilizzato dal modulo simplenews, il gestore delle newsletter di Drupal, per l'invio dei messaggi in formato HTML.

Fortunatamente Mime Mail fornisce la possibilità di utilizzare un mail engine fornito da un altro modulo. Il modulo qui proposto si avvale di questa caratteristica di Mime Mail ed implementa un mail engine alternativo proprio per Mime Mail. Tale mail engine aggiunge l' opzione -f al quinto parametro della funzione PHP mail(), risolvendo il problema anche con Mime Mail.

Configurazione Web Server con Apache e PHP e pannello di controllo Virtualmin su CentOS

Configurare il reboot dopo un kernel panic

Aggiungere la riga kernel.panic = 30 alla fine del file /etc/sysctl.conf. Questo farà si che in caso di kernel panic si riavvierà dopo 30 secondi.

Configurazione hostname

Verificare che il nome dell'host sia impostato correttamente:

nano /etc/hostname

nano /etc/hosts

in maniera tale che il comando

hostname --fqdn

ritorni

server.fastcomgroup.it

cioè il nome completo dell'host.

Installazione virtualmin

Lanciare i seguenti comandi:

e attendere il completamento.

Configurazione di Virtualmin

Eseguire il wizard di post-installazione di virtualmin.

Verificare l'abilitazione dei plugin andando in Virtualmin -> Features and Plugins

Spostarsi in Virtualmin -> System Settings -> Module Config -> Defaults for new domains ed impostare:

  • Full domain name per il campo Domain name style in username
  • 8 per il campo Length of randomly generated password

Configurare le impostazioni per il modulo Mysql spostandosi in Virtualmin -> System Settings -> Server Templates e selezionare il templatte Default Settings. Qui selezionare le opzioni per MySQL database ed impostare le opzioni nel seguente modo:

Ripetere la configurazione anche per il template Default Settings For Sub-Servers impostando le opzioni nel seguente modo:

 

Configurare l'invio delle amil di creazione dei domini spostandosi in Virtualmin -> Server Templates e selezionare il Template Default Settings e spostarsi nelle opzioni per Mail for domain ed effettuare le seguenti modifiche ai valori predefiniti:

  • Selezionare l'opzione Message below .. nel campo Email message to send upon server creation
  • Nel sotto campo Subject line inserire Virtual server ${DOM} creato su ${HOSTNAME}
  • Nel campo Also Cc email to specificare l'indirizzo email al quale si volgiono far arrivare le notifiche delle creazioni dei domini.
  • Nel campo Format for usernames that include domain specificare username@domain

 

Configurazione Notifiche posta elettronica

Per la configurazione di un Web Server con Apache e PHP è consigliabile creare un account di posta per l'utente sotto il quale gira Apache.

Ciò serve ad intercettare le mail di errore generate dall'invio si posta tramite PHP.

Per fare ciò seguire i passi sotto esposti: