Visualizzazione risultati 1 fino 12 di 12

Discussione: Photoshare, upload e open_basedir

  1. #1
    Guest

    Question Photoshare, upload e open_basedir

    Ho un problema con Photoshare 4.0.1 (modulo PostNuke). L'upload delle immagini fallisce con l'errore "Unable to move uploaded file from '/membri/.dummy/temp/phpFId4qk' to '' (adding image)
    Nessun file da caricare".

    Ora la documentazione dice che la cartella di photoshare temporanea (usata immagino durante l'upload) deve risiedere sotto open_dir (le immagini poi sono nel db, quindi open_dir non ha effetto sul path di queste), e così ho fatto, ma open_dir risulta settata a /membri mentre il sito risulta sotto /membri2.

    Questa impostazione è corretta? È possibile risovere in qualche modo oppure dato il setup di Altervista è impossibile?

  2. #2
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    per individuare l'esatta posizione di un file all'interno del filesystem ti conviene usare il codice:

    dirname(realpath(__FILE__)
    nello specifico se posti le righe che fanno lo spostamento e quelle che rileggono il file spostato possiamo trovare una soluzione alternativa ;)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  3. #3
    Guest

    Predefinito

    L'errore dovrebbe apparire nel codice che segue, ma le mi conoscenze di PHP sono troppo basiche per capirne di più, nella photoshareUploadErrorMsg(), ma più di questo non so dire. Grazie per l'aiuto.
    -----------------------------------------

    function photoshare_user_uploadimages()
    {
    $output = new pnHTML();

    $folderID = photoshareGetCurrentFolderID();

    if (!pnSecConfirmAuthKey())
    return photoshareErrorPage(__FILE__, __LINE__, _PSBADAUTHKEY);

    // Check access
    if (!photoshareAccessFolder($folderID, photoshareAccessRequirementEdit, ''))
    return photoshareErrorPage(__FILE__, __LINE__, _PSNOAUTH);

    if (!pnModAPILoad('photoshare', 'user'))
    return photoshareErrorPage(__FILE__, __LINE__, _PSAPILOADFAILED);

    // Get parent folder information
    $folder = pnModAPIFunc('photoshare',
    'user',
    'get_folder_info',
    array( 'folderID' => $folderID ));

    if ($folder === false)
    return photoshareErrorAPIGet();
    else if ($folder === true)
    photoshareErrorPage(__FILE__, __LINE__, _PSCANNOTADDIMAGESWITHOUTFOLDER);

    // Get user information
    $userInfo = pnModAPIFunc('photoshare',
    'user',
    'get_user_info');
    if ($userInfo === false)
    return photoshareErrorAPIGet();

    $totalCapacityUsed = $userInfo['totalCapacityUsed'];

    $menuHide = array();
    $menuSettings = array( 'gotoCurrentFolder' => true );
    photoshareMakeMainMenu($output, $folderID, $menuHide, $menuSettings, _PSTITLEADDINGIMAGES, false, null);

    $imageNum = intval( pnVarCleanFromInput('imagenum') );
    $folderId = photoshareGetCurrentFolderID();
    $imageDir = 'modules/' . photoshareModGetName() . '/pnimages';
    $statusSet = array();

    for ($i=0; $i < $imageNum; ++$i)
    {
    $imageInfo = $_FILES["imagefile$i"];
    $title = pnVarCleanFromInput("imagetitle$i");
    $description = pnVarCleanFromInput("imagedescription$i");

    if (isset($imageInfo['error']) && $imageInfo['error'] != 0 && $imageInfo['name'] != '')
    {
    $statusSet[] = array('ok' => false,
    'message' => $imageInfo['name'] . ': ' . photoshareUploadErrorMsg($imageInfo[error]));
    }
    else
    if ($imageInfo['size'] > 0)
    {
    $statusSet = array_merge($statusSet,
    pnModAPIFunc('photoshare',
    'user',
    'add_image',
    array( 'folderID' => $folderID,
    'dataFilename' => $imageInfo['tmp_name'],
    'dataFileSize' => $imageInfo['size'],
    'imageFilename' => $imageInfo['name'],
    'mimeType' => $imageInfo['type'],
    'title' => $title,
    'description' => $description,
    'isUploaded' => true )) );
    }
    }

    // Quick count of uploaded images
    $acceptedImageNum = 0;
    foreach ($statusSet as $status)
    if ($status['ok'])
    ++$acceptedImageNum;
    $folder['imageCount'] += $acceptedImageNum; // Update for showing only

    if ($acceptedImageNum == 0)
    $statusSet[] = array('ok' => false,
    'message' => _PSNOIMAGES);

    $output->SetInputMode(_PNH_VERBATIMINPUT);
    $output->Text( photoshareGetFolderInfoHTML($folder) );
    $output->LineBreak();
    photoshareDisplayStatusSet($output, $imageDir, $statusSet);
    $output->SetInputMode(_PNH_PARSEINPUT);
    $output->LineBreak();

    $viewURL = pnModURL('photoshare', 'user', 'view', array('fid' => $folderID));
    $output->LineBreak();
    $output->FormStart($viewURL);
    $output->FormSubmit(_PSCONTINUE);
    $output->FormEnd();

    photoshareMakeMainFooter($output);

    return $output->GetOutput();
    }
    Ultima modifica di usssetiathome : 07-03-2005 alle ore 13.59.25

  4. #4
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    il codice che da il problema non penso sia direttamente quello...

    dovresti cercare all'interno del modulo l'istruzione:

    Codice PHP:
    move_uploaded_file(
    e copiare qui il contenuto che le sta attorno...
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  5. #5
    Guest

    Predefinito

    Grazie per la dritta. La funzione è questa:

    function photoshare_userapi_add_image($args)
    {
    $dataFilename = $args['dataFilename'];
    $imageName = $args['imageFilename'];
    $mimeType = $args['mimeType'];
    $isUploaded = $args['isUploaded'];

    if (!isset($args['folderID']) || $args['folderID'] < 0)
    return array( array('ok' => false,
    'message' => photoshareErrorAPI(__FILE__, __LINE__, "Missing folder ID!") ) );

    // For OPEN_BASEDIR reasons we move the uploaded file as fast as possible to an accessible place
    // MUST remember to remove it afterwards!!!
    if ($isUploaded)
    {
    // Create and check tmpfilename
    $tmpdir = pnModGetVar('photoshare', 'tmpdirname');
    if (($tmpfilename = tempnam($tmpdir, 'IMG')) === false)
    return array( array('ok' => false,
    'message' => "Unable to create tmpfilename in '$tmpdir' (adding image)" ) );

    if (move_uploaded_file($dataFilename, $tmpfilename) === false)
    {
    unlink($tmpfilename);
    return array( array('ok' => false,
    'message' => "Unable to move uploaded file from '$dataFilename' to '$tmpfilename' (adding image)" ) );
    }

    $dataFilename = $tmpfilename;
    $args['dataFilename'] = $dataFilename;
    }

    $imageType = photoshareGetImageType($dataFilename, $imageName, $mimeType);

    // The mime type may be unknown when importing from local directory. So set it based on the image type
    if ($mimeType == 'unknown')
    {
    switch ($imageType)
    {
    case 'GIF': $mimeType='image/gif'; break;
    case 'JPG': $mimeType='image/jpeg'; break;
    case 'PNG': $mimeType='image/png'; break;
    default: $mimeType='image'; break;
    }

    $args['mimeType'] = $mimeType;
    }

    if ($imageType == 'ZIP')
    $result = photoshareAddZipArchive($args);
    else
    $result = array( photoshareAddSingleImage($args) );

    // Remove the created tmp file
    if ($isUploaded)
    unlink($dataFilename);

    return $result;
    }

  6. #6
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    alla fine me lo sono scaricato... :d

    il prob sta nella directory temporeanea...

    a quanto pare puoi modificarla tua mano...

    Codice PHP:
    pnModGetVar('photoshare', 'tmpdirname');
    o no?...

    casomai si può forzare... postnuke non lo conosco bene... dopo provo a vedere come fuziona pnModGetVar() ;)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  7. #7
    Guest

    Predefinito

    Ok, ma come la imposto? Se ho ben capito con la configurazione di Altervista ci sono due problemi: 1) il safe_mode che obbliga le funzioni di manipolazione dei file a fare controlli aggiuntivi (es. l'UID dell'owner) 2) OPEN_BASE_DIR che ammette le operazioni solo all'interno della stessa. Io ho provato a impostare il path temporaneo sotto OPEN_BASE_DIR (/membri), ma non funziona comunque.

    Tra l'altro un problema simile credo di averlo con i moduli dei temi (pnRender/Smarty) perché cerca di "compilare" i temi scrivendo nella cartella pnTemp all'interno delle cartelle di PostNuke e fallisce.

    Grazie per l'attenzione, in ogni caso.
    Ultima modifica di usssetiathome : 07-03-2005 alle ore 21.42.02

  8. #8
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    come cartella temporanea non puoi farne una tu tipo

    /membri/usssetiathome/tempdir/

    invece di usare openbase dir?
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  9. #9
    Guest

    Predefinito

    Si, ci ho provato, ma mi risponde "Questa non è una directory o non è scrivibile dal web server. Per favore controllare i permessi". Del resto non posso crearla via FTP perché il sito è sotto /membri2.
    Se invece la imposta a /membri/usssetiathome non mi dà errore nella configurazione, ma poi mi dà errore "Unable to move uploaded file from '/membri/.dummy/temp/phpwsZUbG'", come se usasse direttamente OPEN_BASEDIR invece del percorso che gli passo, che potrebbe anche non esistere perché io non l'ho mai creato.

  10. #10
    L'avatar di Evcz
    Evcz non è connesso Utente storico
    Data registrazione
    31-05-2002
    Residenza
    Vicenza
    Messaggi
    5,670

    Predefinito

    se il sito è sotto membri2 allora prova con

    /membri2/usssetiathome/tempdir/

    i file vengon messi da soli nella cartella di temp e tu quella non puoi toccarla... la temp invece che devi configurare è una temp fittizia che non ha nulla a che fare con la temp reale del server ;)
    There are three kinds of people in this world: people who watch things happen ... people who complain about things that happen ... and people who make things happen...

  11. #11
    Guest

    Predefinito

    Provato, ma stesso problema. Se la documentazione di PHP dice:
    open_basedir string
    Limit the files that can be opened by PHP to the specified directory-tree, including the file itself. This directive is NOT affected by whether Safe Mode is turned On or Off.
    When a script tries to open a file with, for example, fopen() or gzopen(), the location of the file is checked. When the file is outside the specified directory-tree, PHP will refuse to open it. All symbolic links are resolved, so it's not possible to avoid this restriction with a symlink.

    Non credo che riesca a operare su file se sono al di fuori di quel percorso
    Ultima modifica di usssetiathome : 08-03-2005 alle ore 00.00.44

  12. #12
    Guest

    Predefinito

    Mi rispondo dicendo che OPEN_BASEDIR è usato come "prefisso", quindi /Membri dovrebbe includere /Membri2. Sto aspettando una risposta dal forum di Photoshare, vediamo...

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •