ios e upload

IImanuII

Utente Attivo
10 Giu 2012
390
0
16
Salve a tutti, avendo fatto una versione mobile del sito, stavo testando la compatibilità con i vari os mobile.
Tutto è andato bene fino a che non sono andato su ios.

Ho notato che ios non supporta l'upload dei file!

https://developer.apple.com/library...niPhone/CreatingContentforSafarioniPhone.html

Safari on iOS does not support file uploading, that is, <input type="file"> elements. If your webpage includes an input-file control, Safari on iOS disables it.

Per ovviare a questo problema ho trovato un app free che compensa. Sarebbe questa http://picupapp.com/

Adesso: nella mia pagina php ho questo codice per l'upload

HTML:
		<fieldset>
		<label for="mex" ><?php $translate->__('Upload file:'); ?></label>
		<p class="clone">
		<input type="file" name="allegato[]" id="allegato" class='input' /></p>
		<a data-role="button" data-icon="plus" data-corners="false" data-inline="true" data-mini="true" href="#" class="add" rel=".clone"><?php $translate->__('Aggiungi File'); ?>.</a>
		</fieldset>

Avevo pensato di fare un controllo del genere:

se c'è ios allora mostro il link dell'app altrimenti non mostro nulla.

Avevo pensato a un codice del genere:


PHP:
<?php
$ios = strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0 (iPod; U; CPU like Mac OS X; en) AppleWebKit/420.1 (KHTML, like Gecko) Version/3.0 Mobile/4A93 Safari/419.3");
$ios = strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.10");
$ios = strpos($_SERVER['HTTP_USER_AGENT'],"Mozilla/5.0 (iPhone; U; CPU like Mac OS X; en) AppleWebKit/420+ (KHTML, like Gecko) Version/3.0 Mobile/1A543 Safari/419.3");

if ($ios == true) { 
	$up2 = echo "		<fieldset>
		<label for='mex' ><?php $translate->__('Upload file:'); ?></label>
		<p class='clone'>
		<input type='file' name='allegato[]' id='allegato' class='input' /></p>
		<a data-role='button' data-icon='plus' data-corners='false' data-inline='true' data-mini='true' href='#' class='add' rel='.clone'><?php $translate->__('Aggiungi File'); ?>.</a>
		</fieldset>"; 
}else{ 
	$up1 =  echo "		<fieldset>
		<label for='mex' ><?php $translate->__('Upload file:'); ?></label>
		<p class='clone'>
		<input type='file' name='allegato[]' id='allegato' class='input' /></p>
		<a data-role='button' data-icon='plus' data-corners='false' data-inline='true' data-mini='true' href='#' class='add' rel='.clone'><?php $translate->__('Aggiungi File'); ?>.</a>
		</fieldset>
		<br />
		Se stai utilizzando ios, per caricare i file necessiti di un app esterna come <a href='http://picupapp.com/'>questa</a>
		<br />
		Maggiori info su <a href='https://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html'>sito della Apple.</a>"; 
}?>

E' corretto? Soprattutto come lo integro nell'html? Cioè come faccio a stampare $up1 o $up2 ?

Mi chiedevo anche se si poteva fare un controllo più approfondito, cioè verificare se nel dispositivo erà già presente quell'app e di conseguenza mostrare o meno il messaggio.

Saluti

Edit: da un errore syntax error, unexpected T_ECHO

Uffaaa lo immaginavo, come posso fare?
 
Ultima modifica:
Direi che, per capire se l'utente usa iOS, è più semplice questa soluzione:
PHP:
$agent = $_SERVER['HTTP_USER_AGENT'];
$ios = (strpos($agent, 'iPad')) !== false) || (strpos($agent, 'iPod') !== false) || (strpos($agent, 'iPhone') !== false);
L'errore viene restituito perché echo è un costrutto del linguaggio usato per inviare output: non ha senso assegnare il valore restituito a una variabile. Fai così:
PHP:
<fieldset>
    <label><?php $translate->__('Upload file:'); ?></label>
    
    <p class="clone">
        <input type="file" name="allegato[]" id="allegato" class="input" />
    </p>
    
    <a
        data-role="button" data-icon="plus" data-corners="false"
        data-inline="true" data-mini="true" href="#" class="add" rel=".clone"
    >
            <?php $translate->__('Aggiungi File'); ?>.
    </a>

    <?php
    if ($ios) {
    ?>
        <br />
        Se stai utilizzando iOS, per caricare i file necessiti di un app esterna
        come <a href="http://picupapp.com/">questa</a>.
        
        <br />
        
        Maggiori info sul <a href="https://developer.apple.com/library/safari/#documentation/appleapplications/reference/safariwebcontent/CreatingContentforSafarioniPhone/CreatingContentforSafarioniPhone.html">sito della Apple</a>.
    <?php
    }
    ?>
</fieldset>
 
Una piccola implementazione dello snippet di Alex per identificare il numero di versione, ad esempio per iOS 5:
PHP:
<?php if(strpos($_SERVER['HTTP_USER_AGENT'], 'iPhone OS 5_0') !== false) {... };?>
questo perché l'user_agent viene spedito in un formato del genere:
PHP:
Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_0 like Mac OS X; en-us) AppleWebKit/532.9 (KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7
 
Ragazzi grazie ad entrambi adesso provo subito.

L'unica cosa che non capisco è perchè la apple blinda in questo modo il suo os, anche perchè poi tra app e jailbreak le limitazioni sono relativamente superate (certo è che il sistema con il jail divente più instabile) Bho....
 
Lo blinda per averne il controllo completo, si tratta di un software commerciale nel suo senso più ampio.
 
Con il metodo fi alessandro mi portava un errore su questa riga

PHP:
$ios = (strpos($agent, 'iPad')) !== false) || (strpos($agent, 'iPod') !== false) || (strpos($agent, 'iPhone') !== false);

syntax error, unexpected ')'

Mancava una parentesi iniziale.
PHP:
$ios = ((strpos($agent, 'iPad')) !== false) || (strpos($agent, 'iPod') !== false) || (strpos($agent, 'iPhone') !== false);
 

Discussioni simili