Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: senser в Jan 28, 2006, 16:10



Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: senser в Jan 28, 2006, 16:10
Здравейте,

Работя в момента върху един web интерфейс за управление на съдържанието на site базиран на LAMP.
Имам проблем със скрипта, който обработва файловете (картинки, pdf, ....) за качване, и по-точно проблема е не със скрипта, а с предаването на информацията за файловете, които се качват.
По-конкретно: формата за избор на файл за upload съдържа:
Примерен код

<form enctype = "multipart/form-data" action = "upload_man_pic.php" method = "POST">
<input type = "hidden" name = "MAX_FILE_SIZE" value = "1000000">
Upload file Manual: &nbsp <input name = "file_manual" type = "file"> <br/><br/>


Ето и част от upload_man_pic.php
Примерен код

$file_manual = $HTTP_POST_FILES['file_manual']['tmp_name'];


Като резултат $file_manual не съдържа нищо ...... :(
Целият глобален масив $HTTP_POST_FILES също е празен.
files_upload е разрешен в php.ini.
Ето още допълнителна инфо, която евентуално може да е от полза:
http://87.126.43.38:777/php_info.php


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: в Jan 28, 2006, 16:38
Я пробвай с $_FILES да го достъпваш, не през HTTP_POST_FILES.


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: Hapkoc в Jan 28, 2006, 17:01
Аз друго да кажа само, не съвсем по темата.

Понеже гледам br таговете си ги затворил както е по xhtml стандарта, а input тага не. Следвай един стандарт навсякъде, после няма да се чудиш нещо защо тук работи а там не.

И също - май не е много коректно да се слага интервал между името на атрибут и знака за равенство, както и между знака за равенство и стойността на атрибута.

А по темата и аз си мисля, че с $_FILES трябва да стане. С $HTTP_POST_FILES също май трябва да работи ако сложиш
Примерен код

global $HTTP_POST_FILES;


Поздрави


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: senser в Jan 29, 2006, 11:41
Пробвал съм с "_FILES", както и с PUT вместо POST(ясно е че с GET не става....), но без резултат.
Относно <input> tag-овете: принципно ги затварям, но като пишех пост-а тук не сметнах, че ще е от значение и затова съм ги оставил така (<br/> по инерция го пиша затворен).
Поправете ме ако греша, но $HTTP_POST_FILES не е ли глобален масив, и според мен е излишно аз да го декларирам като такъв (пробвах и този вариант, но не работи).

Почнах да си мисля, че съм пропуснал нещо в конфигурирането на апач-а, но скрипта се държи по същия начин и на друг сървър .......


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: Йордан в Jan 29, 2006, 12:17
http://it-place.org/index.p....rcid=30


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: senser в Jan 29, 2006, 12:43
Цитат (GigaVolt @ Ян. 29 2006,13:17)
http://it-place.org/index.p....rcid=30

Мерси за линк-а, но аз правя същото нещо в скрипт-а с тази разлика, че не "капсулирано" в клас.
Съмнявам се, че и класа който си дал за upload ще сработи при положение, че sizeof($HTTP_POST_FILES) e 0.


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: Йордан в Jan 29, 2006, 13:13
Примерен код

  //**************************************
    //    
    // Name: File uploader/indexer
    // Description:This code indexs files, u
    //     ploads, and deletes. PLease vote for me!
    //    
    // By: InteractiveWebGuys
    //
    // Returns:It out puts a table to the br
    //     owser that shows each file.
    //
    // Side Effects:none as of now
    //
    //This code is copyrighted and has    // limited warranties.Please see http://
    //     www.Planet-Source-Code.com/vb/scripts/Sh
    //     owCode.asp?txtCodeId=594&lngWId=8    //for details.    //**************************************
    //    
    
    <?php
    error_reporting(0);
    //this turns off error reporting we doth
    //     is so that we don't get a warning for th
    //     e $action variable
    $destination=".";
    //the directory that the script index's
    //     if you want the current directory put a
    //     "." if you want another folder
    //put "foldername"
    if ($action=='delete')
    {
    $del = unlink("./$destination/$fle");
    }
    echo '<FONT SIZE="+2" COLOR="FF9A00"><CENTER>File manager</CENTER></FONT><BR><BR><TABLE BORDER=0 CELLSPACING=0 CELLPADDING=o><TR><TD ALIGN=center WIDTH=200 bgcolor=FFECCE><CENTER>Filename:</CENTER></TD><TD ALIGN=center WIDTH=200 bgcolor=FFECCE><CENTER>Functions:</CENTER></TD><TD ALIGN=center WIDTH=200 bgcolor=FFECCE><CENTER>Filesize(in bytes):</CENTER></TD><TD ALIGN=center WIDTH=150 bgcolor=FFECCE><CENTER>Filetype:</CENTER></TD><TD ALIGN=center WIDTH=150 bgcolor=FFECCE><CENTER>Created on:</CENTER></TD></TABLE>';
    $directory = opendir($destination);
    while( $file = readdir( $directory ) )
    {
    $file_ar[] = $file;
    }
    foreach( $file_ar as $file )
    {
    if( $file == ".." || $file == "." )
    {
    continue;
    }
    $type= strrchr($file,'.');
    $name=$file;
    $name2=$destination."/".$file;
    if($type==''){$type='dir';}
    $sizeoff=filesize($name2);
    $time=date("D M j Y",filectime($name2));
    if($time=='Wed Dec 31 1969'){$time='Unknown';}
    if($sizeoff==''){$sizeoff='Unknown';}
    if($sizeoff=='0'){$sizeoff='Unknown';}
    $file2 = dirname($name2);
    if($color == "FF9A00") {
    $color = "FFECCE";
    } else {
    $color = "FF9A00";
    }
    echo"<TABLE BORDER=0 CELLSPACING=0 CELLPADDING=o><TR><TD ALIGN=center WIDTH=200 bgcolor='$color'><a href='$uname/$file' target=_blank>$name</a></font></TD><TD ALIGN=center WIDTH=200 bgcolor='$color'><A HREF='$PHP_SELF?action=delete&fle=$file&der=$uname'>Delete</A><TD ALIGN=center WIDTH=200 bgcolor='$color'>$sizeoff</TD> <TD ALIGN=center WIDTH=150 bgcolor='$color'>$type</TD><TD ALIGN=center WIDTH=150 bgcolor='$color'>$time</TD></TABLE>";
    }
    echo "<CENTER><FONT SIZE='+2' COLOR=\"FF9A00\"><BR><BR>Uploader</FONT></CENTER><BR><BR><FORM ACTION='$PHP_SELF' METHOD=post enctype=\"multipart/form-data\">File:<BR><INPUT TYPE='file' size='20' name='filename'><BR><CENTER> <input type=\"hidden\" name=\"action\" value=\"uploadProg\"><INPUT TYPE='hidden' name='action' value='upload'><INPUT TYPE='submit' value='Upload File'></CENTER></FORM>";
    closedir($directory);
    if($action==''){$action='noaction';}else{$action=$action;}
    if($action=='upload')
    {
    $filename==$filename_name;
    $action=('uploadprog');
    $destination=".";
    copy($filename,$destination."/".$filename_name);
    echo "<h2>File Uploaded.</h2>";
    echo "<HEAD><META HTTP-EQUIV='Refresh' CONTENT=1></HEAD>";
    }
    if ($filename=="none") {echo("<h1>No File Selected....</h1>"); break;}
    uploadProg($filename,$filename_name);
    break;
    ?>


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: Йордан в Jan 29, 2006, 13:19
http://bg2.php.net/features.file-upload


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: в Jan 29, 2006, 14:33
Доколкото си спомням HTTP_POST_FILES след една версия на PHP вече не е актуален...и се използва $_FILES.
Така че пробвай пак с него.


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: senser в Jan 29, 2006, 14:44
Цитат (Guest @ Ян. 29 2006,15:33)
Доколкото си спомням HTTP_POST_FILES след една версия на PHP вече не е актуален...и се използва $_FILES.
Така че пробвай пак с него.

А аз това което съм чел е обратно ...... т.е. за да работи кода и на по-стари версии на РНР, трябва да се използва $HTTP_POST_FILES, но както и да е - казах вече, че пробвах и не става. Още повече, че достъпвам другите променливи от глобалните масиви по-този "old-style" начин без проблеми.
Скрипт-а на GigaVolt също не сработва. В момента го разучавам, но ми се струва поне на пръв поглед, че има някои .......... "особености", така че ако някой може да го пробва дали сработва при него ще ми е от полза (прдполагам че при GigaVolt работи :)) )

@GigaVolt: Мерси за времето и вниманието ;). Линка към РНР ръководството е почти идентичен с това което аз правя, с тази разлика, че при  мен не тръгва :(......... явно изпукам нещо


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: senser в Jan 29, 2006, 14:53
Реших проблема............ но направо ме е срам да кажа къде беше :(
Допуснал съм "правописна" грешка при "post" и  се  е получило "pots"
Сори за изгубеното време, обещавам следващия път да ползвам поне "леко оцветен" тхт редактор вместо nano :)


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: Йордан в Jan 29, 2006, 19:15
mcedit  :D


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: prilep в Jan 29, 2006, 20:28
Здрасти - ето малко код:

Примерен код

<?php
/*
 * Created on Jan 29, 2006
 *
 */
error_reporting(E_ALL);
ini_set('display_errors', 1);
ini_set('log_errors', 0);

if (isset($_POST['upload'])) {
    $myvar = $HTTP_POST_FILES['attach']['tmp_name'];
    $secondvar = $HTTP_POTS_FILES['attach']['tmp_name'];
    
     printf($myvar);
}
?>
  <form method="post" enctype="multipart/form-data">
  <p>some files</p>
  <input type="file" name="attach" size="50" maxlength="100000" accept="text/*"/><br/>
  <input type="submit" name="upload" value="test"/>
  
  </form>



Виж първите три реда. Ако и при теб беше така щеше да "получиш" следното:

Примерен код

Notice: Undefined variable: HTTP_POTS_FILES in /home/web/Tools/test.php on line 12


Извода е, че като пишеш нещо, трябва да го пишеш в този "режим". Като го пуснеш да работи - само логваш евентуалните грешки и непоказваш нищо.

От друга страна и Eclipsa и ZendStudio-то имат код анализатор, който предупреждава за такива неща ..


Титла: Проблем със РНР скрипт за upload на файлове
Публикувано от: в Jan 29, 2006, 22:35
@prilep: добра идея наистина ....... поне за неща в процес на разработка. Мерси ;)