Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3

Переименовать файлы при загрузке на сервер

25.01.2015, 21:09. Показов 1173. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Коллеги!

Есть хороший скрипт - парсит почту, записывает ее в MySQL, вложения сохраняет на сервере.
phpclasses.org/package/3324-PHP-Retrieve-e-mail-messages-into-a-MySQL-database.html

Но у меня проблема - никак не могу исправить код.

Но он сохраняет файлы так: IDfilemane (напр.: 25myimage.jpg)

А мне нужно: filemame_ID (напр.: myimage_25.jpg)
или
filemame_ID_date_time (напр.: myimage_25_2015-01-25-12-00.jpg)

Пожалуйста, помогите!!!
-----------------

Вот скрипт:

Добавлено через 3 минуты
начало скрипта:

<?
/** EMAIL TO DB Author:Ernest Wojciuk */
class EMAIL_TO_DB {

var $IMAP_host; #pop3 server
var $IMAP_port; #pop3 server port
var $IMAP_login;
var $IMAP_pass;
var $link;
var $error = array();
var $status;
var $max_headers = 10; #How much headers to retrive 'max'=all headers
var $filestore;
var $file_path = '/var/www/files/email/'; #Where to write file attachments
var $partsarray = array();
var $msgid =1;
var $newid;
var $logid;
var $this_file_name = 'example_1.php'; #If mode "html"
var $mode = 'html'; #If script run from cron = "cron" or "html"
var $spam_folder = 1; #Folder where moving spam (ID from DB)
var $file = array(); #File in multimart message
function connect($host, $port, $login, $pass){
$this->IMAP_host = $host;
$this->IMAP_login = $login;
$this->link = imap_open("{". $host . $port."}INBOX", $login, $pass);
if($this->link) {
$this->status = 'Connected';
} else {
$this->error[] = imap_last_error();
$this->status = 'Not connected';
}
}
function set_path(){
$path = $this->file_path;
return $path;
}
function set_filestore(){
$dir = $this->dir_name();
$path = $this->set_path();
$this->filestore = $path.$dir;
}
/** Get mailbox info*/
function mailboxmsginfo(){
//$mailbox = imap_mailboxmsginfo($this->link); #It's wery slow
$mailbox = imap_check($this->link);
if ($mailbox) {
$mbox["Date"] = $mailbox->Date;
$mbox["Driver"] = $mailbox->Driver;
$mbox["Mailbox"] = $mailbox->Mailbox;
$mbox["Messages"]= $this->num_message();
$mbox["Recent"] = $this->num_recent();
$mbox["Unread"] = $mailbox->Unread;
$mbox["Deleted"] = $mailbox->Deleted;
$mbox["Size"] = $mailbox->Size;
} else {
$this->error[] = imap_last_error();
}
return $mbox;
}
/** Number of Total Emails */
function num_message(){
return imap_num_msg($this->link);
}
/** Number of Recent Emails */
function num_recent(){
return imap_num_recent($this->link);
}
/** Type and subtype message */
function msg_type_subtype($_type){
if($_type > 0){
switch($_type){
case '0': $type = "text"; break;
case '1': $type = "multipart"; break;
case '2': $type = "message"; break;
case '3': $type = "application"; break;
case '4': $type = "audio"; break;
case '5': $type = "image"; break;
case '6': $type = "video"; break;
case '7': $type = "other"; break;
}
}
return $type;
}
/** Flag message */
function email_flag(){
switch ($char) {
case 'S':
if (strtolower($flag) == '\\seen') {
$msg->is_seen = true;
}
break;
case 'A':
if (strtolower($flag) == '\\answered') {
$msg->is_answered = true;
}
break;
case 'D':
if (strtolower($flag) == '\\deleted') {
$msg->is_deleted = true;
}
break;
case 'F':
if (strtolower($flag) == '\\flagged') {
$msg->is_flagged = true;
}
break;
case 'M':
if (strtolower($flag) == '$mdnsent') {
$msg->is_mdnsent = true;
}
break;
default:
break;
}
}
/** Parse e-mail structure */
function parsepart($p,$msgid,$i){
$part=imap_fetchbody($this->link,$msgid,$i);
#Multipart
if ($p->type!=0){
#if base64
if ($p->encoding==3)$part=base64_decode($part );
#if quoted printable
if ($p->encoding==4)$part=quoted_printable_deco de($part);
#If binary or 8bit -we no need to decode
#body type (to do)
switch($p->type) {
case '5': # image
$this->partsarray[$i][image] = array('filename'=>imag1,'string'=>$part, 'part_no'=>$i);
break;
}
#Get attachment
$filename='';
if (count($p->dparameters)>0){
foreach ($p->dparameters as $dparam){
if ((strtoupper($dparam->attribute)=='NAME') ||(strtoupper($dparam->attribute)=='FILENAME')) $filename=$dparam->value;
}
}
#If no filename
if ($filename==''){
if (count($p->parameters)>0){
foreach ($p->parameters as $param){
if ((strtoupper($param->attribute)=='NAME') ||(strtoupper($param->attribute)=='FILENAME')) $filename=$param->value;
}
}
}
if ($filename!='' ){
$this->partsarray[$i][attachment] = array('filename'=>$filename,'string'=>$p art, 'encoding'=>$p->encoding, 'part_no'=>$i,'type'=>$p->type,'subtype'=>$p->subtype);
}
#end if type!=0
}
#Text email
else if($p->type==0){
#decode text
#if QUOTED-PRINTABLE
if ($p->encoding==4) $part=quoted_printable_decode($part);
#if base_64
if ($p->encoding==3) $part=base64_decode($part);
#if plain text
if (strtoupper($p->subtype)=='PLAIN')1;
#if HTML
else if (strtoupper($p->subtype)=='HTML')1;
$this->partsarray[$i][text] = array('type'=>$p->subtype,'string'=>$part);
}
#if subparts
if (count($p->parts)>0){
foreach ($p->parts as $pno=>$parr){
$this->parsepart($parr,$this->msgid,($i.'.'.($pno+1)));
}
}
return;
}
/** All email headers */
function email_headers(){
#$headers=imap_headers($this->link);
if($this->max_headers == 'max'){
$headers = imap_fetch_overview($this->link, "1:".$this->num_message(), 0);
} else {
$headers = imap_fetch_overview($this->link, "1:$this->max_headers", 0);
}
if($this->max_headers == 'max') {
$num_headers = count($headers);
} else {
$count = count($headers);
if($this->max_headers >= $count){
$num_headers = $count;
} else {
$num_headers = $this->max_headers;
}
}
$size=sizeof($headers);
for($i=1; $i<=$size; $i++){
$val=$headers[$i];
//while (list($key, $val) = each($headers)){
$subject_s = (empty($val->subject)) ? '[No subject]' : $val->subject;
$lp = $lp +1;
imap_setflag_full($this->link,imap_uid($this->link,$i),'\\SEEN',SE_UID);
$header=imap_headerinfo($this->link, $i, 80,80);
if($val->seen == "0" && $val->recent == "0") {echo '<b>'.$val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."</b><br><hr>" ;}
else {echo $val->msgno . '-' . $subject_s . '-' . $val->from .'-'. $val->date."<br><hr>" ;}
}
}
/** Get email */
function email_get(){
$email = array();
$this->set_filestore();
$header=imap_headerinfo($this->link, $this->msgid, 80,80);
$from = $header->from;
$udate= $header->udate;
$to = $header->to;
$size = $header->Size;
if ($header->Unseen == "U" || $header->Recent == "N") {
#Check is it multipart messsage
$s = imap_fetchstructure($this->link,$this->msgid);
if (count($s->parts)>0){
foreach ($s->parts as $partno=>$partarr){
#parse parts of email
$this->parsepart($partarr,$this->msgid,$partno+1);
}
} else { #for not multipart messages
#get body of message
$text=imap_body($this->link,$this->msgid);
#decode if quoted-printable
if ($s->encoding==4) $text=quoted_printable_decode($text);
if (strtoupper($s->subtype)=='PLAIN') $text=$text;
if (strtoupper($s->subtype)=='HTML') $text=$text;
$this->partsarray['not multipart'][text]=array('type'=>$s->subtype,'string'=>$text);
}
if(is_array($from)){
foreach ($from as $id => $object) {
$fromname = $object->personal;
$fromaddress = $object->mailbox . "@" . $object->host;
}
}
if(is_array($to)){
foreach ($from as $id => $object) {
$toaddress = $object->mailbox . "@" . $object->host;
}
}
$email['CHARSET'] = $charset;
$email['SUBJECT'] = $this->mimie_text_decode($header->Subject);
$email['FROM_NAME'] = $this->mimie_text_decode($fromname);
$email['FROM_EMAIL'] = $fromaddress;
$email['TO_EMAIL'] = $toaddress;
$email['DATE'] = date("Y-m-d H:i:s",strtotime($header->date));
$email['SIZE'] = $size;
#SECTION - FLAGS
$email['FLAG_RECENT'] = $header->Recent;
$email['FLAG_UNSEEN'] = $header->Unseen;
$email['FLAG_ANSWERED']= $header->Answered;
$email['FLAG_DELETED'] = $header->Deleted;
$email['FLAG_DRAFT'] = $header->Draft;
$email['FLAG_FLAGGED'] = $header->Flagged;
}
return $email;
}
function mimie_text_decode($string){
$string = htmlspecialchars(chop($string));
$elements = imap_mime_header_decode($string);
if(is_array($elements)){
for ($i=0; $i<count($elements); $i++) {
$charset = $elements[$i]->charset;
$txt .= $elements[$i]->text;
}
} else {
$txt = $string;
}
if($txt == ''){
$txt = 'No_name';
}
if($charset == 'us-ascii'){
//$txt = $this->charset_decode_us_ascii ($txt);
}
return $txt;
}
/** Save messages on local disc */
function save_files($filename, $part){
$fp=fopen($this->filestore.$filename,"w+");
fwrite($fp,$part);
fclose($fp);
chown($this->filestore.$filename, 'apache');
}
/** Set flags */
function email_setflag(){
imap_setflag_full($this->link, "2,5","\\Seen \\Flagged");
}
/** Mark a message for deletion */
function email_delete(){
imap_delete($this->link, $this->msgid);
}
/** Delete marked messages */
function email_expunge(){
imap_expunge($this->link);
}
/** Close IMAP connection */
function close(){
imap_close($this->link);
}
function listmailbox(){
$list = imap_list($this->link, "{".$this->IMAP_host."}", "*");
if (is_array($list)) {
return $list;
} else {
$this->error = "imap_list failed: " . imap_last_error() . "\n";
}
return array();
}
/** SPAM DETECTION */
function spam_detect(){
$email = array();
$id = $this->newid; #ID email in DB
$execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, Subject, Message, Message_html FROM emailtodb_email WHERE ID='".$id."'");
$row = mysql_fetch_array($execute);
$ID = $row['ID'];
$email['Email'] = $row['EmailFrom'];
$email['Subject'] = $row['Subject'];
$email['Text'] = $row['Message'];
$email['Text_HTML'] = $row['Message_html'];
if($this->check_blacklist($email['Email'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Subject'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Text'])){
$this->update_folder($id, $this->spam_folder);
}
if($this->check_words($email['Text_HTML'])){
$this->update_folder($id, $this->spam_folder);
}
}
function check_blacklist($email){
#spam - emails
$execute = mysql_query("SELECT Email FROM emailtodb_list WHERE Email='".addslashes($email)."' AND Type='B'");
$row = mysql_fetch_array($execute);
$e_mail = $row['Email'];
if($e_mail == $email){
return 1;
} else {
return 0;
}
}
function check_words($string){
#spam - words
$string = strtolower($string);
$execute = mysql_query("SELECT Word FROM emailtodb_words ");
while($row = mysql_fetch_array($execute)){
$word = strtolower($row['Word']);
if (eregi($word, $string)) {
return 1;
}
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
25.01.2015, 21:09
Ответы с готовыми решениями:

Переименовать изображение при загрузке на сервер через uniqid
Загружаю изображение через форму таким образом $file=$_FILES; $image= addslashes(file_get_contents($_FILES)); $image_name=...

Портятся файлы при загрузке на сервер
Добрый день. У меня проблема такого характера: я передаю текст на сайт через шелл методом multipart/form-data. Вот отрывок кода в...

Почему сервер не отдает файлы .png при загрузке страницы
При загрузке страницы, не загружаются изображения или не удачен доступ к каталогу с изображением Можно ли это исправить и в чем...

4
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
25.01.2015, 21:10  [ТС]
// и окончание скрипта:

/*** DB FUNCTIONS
*****************************/
/** Add email to DB */
function db_add_message($email){
$execute = mysql_query("INSERT INTO emailtodb_email (IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, MsgSize) VALUES
('".$message_id."',
'".$email['FROM_EMAIL']."',
'".addslashes(strip_tags($email['FROM_NAME']))."',
'".addslashes(strip_tags($email['TO_EMAIL']))."',
'".$email['DATE']."',
'".date("Y-m-d H:i:s")."',
'".addslashes($email['SUBJECT'])."',
'".$email["SIZE"]."')");
$execute = mysql_query("select LAST_INSERT_ID() as UID");
$row = mysql_fetch_array($execute);
$this->newid = $row["UID"];
}
/** Add attachments to DB */
function db_add_attach($file_orig, $filename){
$execute = mysql_query("INSERT INTO emailtodb_attach (IDEmail, FileNameOrg, Filename) VALUES
('".$this->newid."',
'".addslashes($file_orig)."',
'".addslashes($filename)."')");
}
/** Add email to DB */
function db_update_message($msg, $type= 'PLAIN'){
if($type == 'PLAIN') $execute = mysql_query("UPDATE emailtodb_email SET Message='".addslashes($msg)."' WHERE ID= '".$this->newid."'");
if($type == 'HTML') $execute = mysql_query("UPDATE emailtodb_email SET Message_html='".addslashes($msg)."' WHERE ID= '".$this->newid."'");
}
/** Insert progress log */
function add_db_log($email, $info){
$execute = mysql_query("INSERT INTO emailtodb_log (IDemail, Email, Info, FSize, Date_start, Status) VALUES
('".$this->newid."',
'".$email['FROM_EMAIL']."',
'".addslashes(strip_tags($info))."',
'".$email["SIZE"]."',
'".date("Y-m-d H:i:s")."',
'2')");
$execute = mysql_query("select LAST_INSERT_ID() as UID");
$row = mysql_fetch_array($execute);
$this->logid = $row['UID'];
return $this->logid;
}
/** Set folder */
function update_folder($id, $folder){
$execute = mysql_query("UPDATE emailtodb_email SET Type = '".addslashes($folder)."' WHERE ID = '".$id."'");
}
/** Update progress log */
function update_db_log($info, $id){
$execute = mysql_query("UPDATE emailtodb_log SET Status = '1', Info='".addslashes(strip_tags($info))."' , Date_finish = '".date("Y-m-d H:i:s")."' WHERE IDlog = '".$id."'");
}
/** Read log from DB */
function db_read_log(){
$email = array();
$execute = mysql_query("SELECT IDlog, IDemail, Email, Info, FSize, Date_start, Date_finish, Status FROM emailtodb_log ORDER BY Date_finish DESC LIMIT 100");
while($row = mysql_fetch_array($execute)){
$ID = $row['IDlog'];
$email[$ID]['IDemail'] = $row['IDemail'];
$email[$ID]['Email'] = $row['Email'];
$email[$ID]['Info'] = $row['Info'];
$email[$ID]['Size'] = $row['FSize'];
$email[$ID]['Date_start'] = $row['Date_start'];
$email[$ID]['Date_finish'] = $row['Date_finish'];
}
return $email;
}
/** Read emails from DB */
function db_read_emails(){
if (!isset($db)) $db = new DB_WL;
$email = array();
$execute = mysql_query("SELECT ID, IDEmail, EmailFrom, EmailFromP, EmailTo, DateE, DateDb, Subject, Message, Message_html, MsgSize FROM emailtodb_email ORDER BY ID DESC LIMIT 25");
while($row = mysql_fetch_array($execute)){
$ID = $row['ID'];
$email[$ID]['Email'] = $row['EmailFrom'];
$email[$ID]['EmailName'] = $row['EmailFrom'];
$email[$ID]['Subject'] = $row['Subject'];
$email[$ID]['Date'] = $row['DateE'];
$email[$ID]['Size'] = $row['MsgSize'];
}
return $email;
}
function dir_name() {
$year = date('Y');
$month = date('m');
$dir_n = $year . "_" . $month;
echo $this->set_path();
if (is_dir($this->set_path() . $dir_n)) {
return $dir_n . '/';
} else {
mkdir($this->set_path() . $dir_n, 0777);
return $dir_n . '/';
}
}
function do_action(){
if($this->num_message() >= 1) {
if($this->msgid <= 0) {
$this->msgid = 1;
} else {
$this->msgid = $_GET[msgid] + 1;
}
#Get first message
$email = $this->email_get();
#Get store dir
$dir = $this->dir_name();
#Insert message to db
$ismsgdb = $this->db_add_message($email);
$id_log = $this->add_db_log($email, 'Copy e-mail - start ');
foreach($this->partsarray as $part){
if($part[text][type] == 'HTML'){
#$message_HTML = $part[text][string];
$this->db_update_message($part[text][string], $type= 'HTML');
}elseif($part[text][type] == 'PLAIN'){
$message_PLAIN = $part[text][string];
$this->db_update_message($part[text][string], $type= 'PLAIN');
}elseif($part[attachment]){
#Save files(attachments) on local disc

// $message_ATTACH[] = $part[attachment];
foreach(array($part[attachment]) as $attach){
$attach[filename] = $this->mimie_text_decode($attach[filename]);
$attach[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $attach[filename]);
$this->add_db_log($email, 'Start coping file:"'.strip_tags($attach[filename]).'"');
$this->save_files($this->newid.$attach[filename], $attach[string]);
$filename = $dir.$this->newid.$attach[filename];
$this->db_add_attach($attach[filename], $filename);
$this->update_db_log('<b>'.$filename.'</b>Finish coping: "'.strip_tags($attach[filename]).'"', $this->logid);
}
//

}elseif($part[image]){
#Save files(attachments) on local disc
$message_IMAGE[] = $part[image];
foreach($message_IMAGE as $image){
$image[filename] = $this->mimie_text_decode($image[filename]);
$image[filename] = preg_replace('/[^a-z0-9_\-\.]/i', '_', $image[filename]);
$this->add_db_log($email, 'Start coping file: "'.strip_tags($image[filename]).'"');
$this->save_files($this->newid.$image[filename], $image[string]);
$filename = $dir.$this->newid.$image[filename];
$this->db_add_attach($image[filename], $filename);
$this->update_db_log('<b>'.$filename.'</b>Finish coping:"'.strip_tags($image[filename]).'"', $this->logid);
}
}
}
$this->spam_detect();
$this->email_setflag();
$this->email_delete();
$this->email_expunge();
$this->update_db_log('Finish coping', $id_log);
if($email <> ''){
unset($this->partsarray);
# echo "<meta http-equiv=\"refresh\" content=\"2; url=email.monitor.mail.php?msgid=".$this->msgid."\">";
if($this->mode == 'html') {
echo "<meta http-equiv=\"refresh\" content=\"2; url=".$this->this_file_name."?msgid=0\">";
echo "E-mail extract";
}
}
} else {
# No messages
if($this->mode == 'html') {
echo "<meta http-equiv=\"refresh\" content=\"10; url=".$this->this_file_name."?msgid=0\">";
echo "E-mail extract";
}
}
}
}#end class
?>
0
11 / 11 / 2
Регистрация: 30.03.2010
Сообщений: 199
25.01.2015, 21:50
оформите код...читать невыносимо
0
0 / 0 / 0
Регистрация: 25.01.2015
Сообщений: 3
26.01.2015, 05:35  [ТС]
Вот файл с исходником
Вложения
Тип файла: zip class.emailtodb.zip (5.4 Кб, 4 просмотров)
0
368 / 406 / 165
Регистрация: 29.05.2014
Сообщений: 1,494
26.01.2015, 07:51
Ну и простынь.
попробуй поменяй
PHP
1
2
$this->save_files($this->newid.$attach[filename], $attach[string]);
$filename = $dir.$this->newid.$attach[filename];
на
PHP
1
2
$this->save_files($this->$attach[filename]."_".newid, $attach[string]);
$filename =  $dir.$this->$attach[filename]."_".newid;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.01.2015, 07:51
Помогаю со студенческими работами здесь

Переименовать файлы при копировании Delphi XE
Код, который по списку, находящемуся в ListBox копирует файлы в выбранную пользователем папку. В списке файлов могут находиться файлы с...

Ошибка при загрузке изображения на сервер
написана страничка для загрузки картинки... что-то наверное напутала с расширением файла... короче, выдает ошибку Warning:...

Название файла при загрузке на сервер
&lt;? $filew = $_FILES; $filename = $_FILES; if(!empty($filew)) { ini_set('memory_limit', '32M'); $maxsize = &quot;100000000&quot;; ...

Потеря данных при загрузке на сервер
Перерыла много инфы на просторах инета, но решение проблемы не нашла..., борюсь вторую неделю, мозг кипит уже... При загрузке файлов на...

Сжатие изображений при загрузке на сервер
Здравствуйте. Можно ли осуществить сжатие (изменение размера ) изображения при загрузке на сервер ,желательно, без посторонних утилит?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru