[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    Доброго вам времени суток. Прошел обучалку с официального сайта zendframework2 http://framework.zend.com/manual/2.0/en/user-guide/overview.html#. По окончании все работает, кроме одного. Если нажать edit редактирование альбома то выдает вот такую ошибку:

    An error occurred
    An error occurred during execution; please try again later.
    Additional information:
    Zend\Stdlib\Exception\BadMethodCallException

    File:

    D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Stdlib\Hydrator\ArraySerializable.php:29

    Message:

    Zend\Stdlib\Hydrator\ArraySerializable::extract expects the provided object to implement getArrayCopy()

    Stack trace:

    #0 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Form\Fieldset.php(585): Zend\Stdlib\Hydrator\ArraySerializable->extract(Object(Album\Model\Album))
    #1 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Form\Form.php(857): Zend\Form\Fieldset->extract()
    #2 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Form\Form.php(292): Zend\Form\Form->extract()
    #3 D:\cod\test\zf2-tutorial\module\Album\src\Album\Controller\AlbumController.php(55): Zend\Form\Form->bind(Object(Album\Model\Album))
    #4 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractActionController.php(83): Album\Controller\AlbumController->editAction()
    #5 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
    #6 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
    #7 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #8 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Mvc\Controller\AbstractController.php(117): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #9 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Mvc\DispatchListener.php(114): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
    #10 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
    #11 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
    #12 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(207): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #13 D:\cod\test\zf2-tutorial\vendor\zendframework\zendframework\library\Zend\Mvc\Application.php(309): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
    #14 D:\cod\test\zf2-tutorial\public\index.php(17): Zend\Mvc\Application->run()
    #15 {main}

    искал в нете решение везде пишут что нужно проверить файлы global.php и local.php что бы были введены правильные данные для подключения к базе данных, но в них все норм. Подскажите плиз если кто знает в чем может быть проблема?
     
  2. Groh

    Groh New Member

    Joined:
    26 Dec 2010
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    c aliexpress gaga фестиваля никто еще игру встряски не смог взломать?
     
  3. fl47590

    fl47590 Member

    Joined:
    15 Nov 2013
    Messages:
    54
    Likes Received:
    8
    Reputations:
    0
    Я, наверное, не все понял. Однако попробуем:
    Чтобы удовлетворить условию парсинга переменой (а это по сути парсинг строки, в которой сепараторами служит все, кроме букв и цифр):
    PHP:
    $.ajax({
        url: 'path/to/php_script',
        type: 'post',
        data: {myarray: <?php echo implode'_'$words ); ?>}
    });
    Соотвественно, обратиться в скрипте можно будет как
    PHP:
    $a $_POST'myarray' ]
    .
    "еще нужно все слова поместить по отдельности в эту конструкцию.":
    Если я правильно понял, то нужно перебрать все имеющиеся слова в цикле, подставляя их в строку. Например,
    http://ru2.php.net/manual/en/control-structures.foreach.php.

    P.S. А лучше подробнее опиши, что тебе нужно и что именно не выходит. Гарантию на верную расшифровку твоего поста я бы не дал.
     
  4. fl47590

    fl47590 Member

    Joined:
    15 Nov 2013
    Messages:
    54
    Likes Received:
    8
    Reputations:
    0
    I_I,
    В JS тебе нужно что-то вроде:
    Code:
            $( document ).ready( function() {
                $( 'textarea' ).keyup( function() {
                    $.post( 'path/to/php/script',    
                            { req: $( 'textarea' ).val() }    
                        ).done(function( data ) {
                            $( "#result" ).html( data );
                        });
                } );        
            } );
    
    Код писал без проверки, но, вроде, все норм.
    В PHP-скрипте нужно разобрать пришедшую строку $_POST[ 'req' ] (например, с помощью имеющегося preg_split), перебрать все получившиеся слова и считать файлы, им соответствующие, отдать пользователю.

    Возможно, имеет смысл изменить архитектуру программы, добавить работу с базой данных, например?
     
    #22144 fl47590, 12 Mar 2014
    Last edited: 12 Mar 2014
  5. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    Спасибо, а можно ли этот файл useragents.txt пополнять строками через php скрипт ?

    допустим скрипт record.php читает файл useragents.txt и выводит его содержимое - напротив каждой строки выведеной из файла есть чекбокс - для удаления строки
    и в конце есть input type text - Для внесения в файл новой строки

    как можно добавить кнопку или чекбокс к строкам ? здесь так же не знаю как в регулярке разрешить кавычки, и другие символы встречающиеся в строке юзерагента любого, например:
    Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_7; ja-jp) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
    PHP:
    <?php
    header
    ('Content-Type: text/html; charset=utf-8');
    if(
    $_POST['submit']) {
    if(empty(
    $_POST['name'])) exit('<h2>введи useragent</h2>');
    if (!
    preg_match("#^[a-z0-9]+$#i"$_POST['name'])){
      die(
    'Разрешены только символы a-z и цифры');
    }
    }
    $file 'useragent.txt';
    file_put_contents($file$_POST['name']."\r\n"FILE_APPEND LOCK_EX);
    $file 'useragent.txt';
    $arr file($file);
    $count count($arr);
    for (
    $i 0$i $count$i++) {
        echo 
    htmlspecialchars($arr[$i]), '<br />';
    }
    ?>
     
    #22145 GAiN, 13 Mar 2014
    Last edited: 13 Mar 2014
  6. Kruzak

    Kruzak New Member

    Joined:
    21 Dec 2010
    Messages:
    126
    Likes Received:
    4
    Reputations:
    1
    Помогите пожалуйста оптимизировать код и сделать красивее

    мне не нравиться использовать несколько раз, как можно это оптимизировать или переделать?
    Code:
    if (empty($error)) {

    вот часть кода
    PHP:
             if (empty($error)) {

            
    mysql_query("START TRANSACTION;");

            
    $q mysql_query("***");
            if (
    mysql_affected_rows() == 0) {

              
    mysql_query("ROLLBACK");

              
    $error 13;

            }

     }

          if (empty(
    $error)) {

            
    $q mysql_query("***");
            if (
    mysql_affected_rows() == 0) {

              
    mysql_query("ROLLBACK");

              
    $error 14;

            }

          }

          if (empty(
    $error)) {

            
    $q mysql_query("***");

            if (
    mysql_affected_rows() == 1) {

              
    mysql_query("COMMIT;");

              
    $id mysql_insert_id();

            } else {

              
    mysql_query("ROLLBACK");

              
    $error 15;

            }

          }
     
  7. fl47590

    fl47590 Member

    Joined:
    15 Nov 2013
    Messages:
    54
    Likes Received:
    8
    Reputations:
    0
    PHP:
    if (!empty($error)) die( $error );
     
  8. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Хайлоу

    Накидайте скриптик.

    Есть файл ввида

    title
    Description
    Title
    Description
    title
    Description
    Title
    Description

    title
    Description
    Title
    Description


    Вообщем нужно парсить текстовик и разложить дескрипшоны и тайлты по разные файлы

    Ну вы поняли просто все в одном файле, первое идет тайтл второе дескрипшон и так весь файл.

    +
     
  9. serjio_5

    serjio_5 New Member

    Joined:
    4 Feb 2014
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    вот нашел скрипт для пинга ,но че то не работает,не принимает в введенный в форму ип адрес
    PHP:
    <?php
    //вот только добавил для отображении правильной кодировки
    header("Content-Type: text/html; charset=cp866");
    //ping tool
    $ping_ip_addr $_GET['Host'];
    $ping_count $_GET['Count'];
    $ping_size $_GET['Size'];
    //тут поправил *ping -с* так как использую скрипт для винды
    $result explode("\n", `ping -n $ping_count  $ping_size
    $ping_ip_addr `);

    print 
    "<pre>";

    foreach(
    $result as $val) {
    print 
    "$val<br>";
    }

    print 
    "</pre>";

    ?>

    <font face="verdana" size="2"><form action="<?php echo
     
    $_SERVER['PHP_SELF']; ?>" method="GET">
    IP Address: <input type="text" name="Host" />
    Count: <input type="text" name="Count" value="5" />
    Size: <input type="text" name="Size" value="32" />
    <input type="submit" value="Ping Host" name="Submit" />
    </form>
    во шо выдает
    Обмен пакетами с 0.0.0.32 по с 32 байтами данных:
    PING: сбой передачи. General failure.
    PING: сбой передачи. General failure.
    PING: сбой передачи. General failure.
    PING: сбой передачи. General failure.
    PING: сбой передачи. General failure.

    Статистика Ping для 0.0.0.32:
    Пакетов: отправлено = 5, получено = 0, потеряно = 5

    уж очень хочется делать все не выходя из браузера даже пинг,
    во всяком случае пока не разочаровался в магии PHP . :)
     
    #22149 serjio_5, 15 Mar 2014
    Last edited: 15 Mar 2014
  10. Adio

    Adio Elder - Старейшина

    Joined:
    23 May 2005
    Messages:
    1,646
    Likes Received:
    148
    Reputations:
    18
    Ты мне функцию напиши лучше а не браузеры свои показывай :D
     
  11. fl47590

    fl47590 Member

    Joined:
    15 Nov 2013
    Messages:
    54
    Likes Received:
    8
    Reputations:
    0
    PHP:
    <?php
        $originalData 
    file'orig.txt'FILE_IGNORE_NEW_LINES FILE_SKIP_EMPTY_LINES );
        
    $fpTitles fopen'title.txt''w+' );
        
    $fpDescs fopen'descs.txt''w+' );
        for ( 
    $i 0$i count$originalData ); ++$i ) {
            if ( 
    $i == ) {
                
    fwrite$fpTitles$originalData$i ] . "\r\n" );
            } else {
                
    fwrite$fpDescs$originalData$i ] . "\r\n" );
            }
        }
        
    fclose$fpTitles );
        
    fclose$fpDescs );
    ?>
    In: orig.txt
    Out: titles.txt & descs.txt
     
  12. fl47590

    fl47590 Member

    Joined:
    15 Nov 2013
    Messages:
    54
    Likes Received:
    8
    Reputations:
    0
    PHP не причем. 9 строчку меняем на :
    PHP:
    $result explode("\n", `ping -n $ping_count -l $ping_size $ping_ip_addr `);
    Забыл указать параметр "-l" перед размером буфера отправки
     
  13. antras2007

    antras2007 New Member

    Joined:
    4 Jul 2013
    Messages:
    33
    Likes Received:
    0
    Reputations:
    0
    Доброго времени суток. Подскажите пожалуйста, настроил виртуальные хосты в zend server по инструкции. Только почему-то хосты работают только в mozilla. Во всех других браузерах при вводе в адресную строку адреса выдает это:

    Forbidden

    You don't have permission to access / on this server.
    Может кто нибудь знает в чем проблема?
     
  14. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    как сделать что бы каждая строка была всегда с новой строки ?
    у меня получилось так - что если я закрою вкладку - то заного открыв скрипт добавляется строка через строку, как убрать это ?
    PHP:
    <?php
    header
    ('Content-Type: text/html; charset=utf-8');
    if(
    $_POST['submit']) {
    if(empty(
    $_POST['name'])) exit('<h2>введи useragent</h2>');
    }
    $file 'data.txt';
    file_put_contents($file$_POST['name']."\r\n"FILE_APPEND LOCK_EX);
    $file 'data.txt';
    $arr file($file);
    $count count($arr);
    for (
    $i 0$i $count$i++) {
        echo 
    htmlspecialchars($arr[$i]), '<br />';
    }
    ?>
    [​IMG]



    php header location redirect 404


    как сделать редирект что бы отдавался код 404?

    PHP:
    header('HTTP/1.1 404 Not Found');
    header('Status: 404 Not Found');
    header'Location: '.$redirekttrue302);
    если так делаю, то всё равно 302 отдает

    если вместо 302 ставлю 404 то не редиректит вообще

    PHP:
    header('HTTP/1.1 404 Not Found');
    header('Status: 404 Not Found');
    header'Location: '.$redirekt);
    в этом варианте всё равно 302 отдаётся, нужно сделать редирект перенаправив куда нибудь но при этом что бы код отдавался 404 а не 302


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


    монироринг сайта на php
    раньше метрика яндекс показывала Ip посетителя а теперь они ip и useragent не показывают.
    чем можно фиксировать хождения по сайту ? раньше метрика яндекса помогала понять кто где шарит на сайте для дальнейшей фильтрации и блокировки, а теперь они информацию о ip не показывают.
    чем можно альтернативно мониторить ip и юзерагенты, может есть лёгкий самопал, который назначит сессию и будет фиксировать кто на какие страницы лазил и сколько там был ?

    чем можно фиксировать такие значения, с учётом что посетитель пожет перемещаться за раз по нескольку страниц на сайте, и обычным сниффером это мало фильтровать, что можете простое но эффективное предложить ? есть ли простенькие скрипты или что то самому написать ?
     
    #22154 GAiN, 20 Mar 2014
    Last edited: 23 Aug 2014
  15. sum010

    sum010 New Member

    Joined:
    14 Jun 2012
    Messages:
    6
    Likes Received:
    0
    Reputations:
    0
    Добрый день. прошу помощи

    данный скрипт берет название файлов из ИН ТХТ
    ищет файлики в папке и если находит то копирует в другую

    На денвере выдает ошибку
    Z:\home\test1.ru\www/foto failed to open dir: No such file or directory

    как обойти все это - прошу помочь

    Благодарю


    Code:
    <?php
    
    header('content-type: text/html; charset=UTF-8');
    
    // прописываем пути к файлам
    define('CATALOG_ROOT',dirname(__FILE__).'/'); // Корневой каталог
    define('IN_FILE_NAME',CATALOG_ROOT.'in.txt'); // путь к файлу входящих данных
    define('RESULT_FILE_NAME',CATALOG_ROOT.'result.txt'); // путь в файлу результата
    define('INIT_DIR_FOR_DELETE',CATALOG_ROOT.'foto');
    
    function getInFile() {
    	// создаем массив путей файлов $files
    	if (is_file(IN_FILE_NAME))
    		$files = array_map("trim",file(IN_FILE_NAME));
    	else {
    		echo 'Отсутствует файл по '.IN_FILE_NAME;
    		exit;
    	}
    	return $files;
    }
    
    function saveInFile() {
    
    	$files = getInFile();
    
    	if (!count($files)) {
    		echo 'Нет значений в файле in.txt';
    		exit;
    	}
    
    	// проверка на сущуствование файлов
    	$result = array();
    	for ($i=0;$i<count($files);$i++)
    		if (file_exists(CATALOG_ROOT.$files[$i]))
    			$result[$i] = $files[$i];
    		else
    			$result[$i] = 'delete';
    
    	// построчное сохранение в файл
    	$f = fopen(RESULT_FILE_NAME, "w");
    	if ($f)
    		foreach ($result as $line)
    			fwrite($f, $line."\r\n");
    	else
    		echo 'Файл не может быть создан по '.RESULT_FILE_NAME.'Проверьте права доступа каталога.';
    	fclose($f);
    }
    
    function rdir ($path2dir) {
    	$d = dir ($path2dir);  
    
    	while (false !== ($entry = $d->read())) {  
    
    		if ($entry!='.' && $entry!='..' && $entry!='' ) {
    			$all_path = $path2dir.$entry;
    			$new_path = go ($all_path, is_file($all_path));  
    
    			if (!is_file($all_path)) {
    				if (!rdir ($new_path)) {
    					return false;
    				}
    			}
    		}
    	}  
    
    	return true;
    }
    
    function go ($path2file, $is_file = true) {  
    
    	if ($is_file) {
    
    		global $files, $for_delete;
    		
    		$is_in_infile = 0;
    		foreach ($files as $k=>$v)
    			if (CATALOG_ROOT.$v == $path2file) {
    				$is_in_infile = 1;
    				//echo CATALOG_ROOT.$v.' <b>is in in.txt</b><br>';
    				$new = CATALOG_ROOT.'in/'.str_replace(INIT_DIR_FOR_DELETE,'',$path2file);
    				//$new = CATALOG_ROOT.'in'.str_replace(dirname($v),'',$v);
    				if (!copy($path2file,$new)) {
    					echo "не удалось скопировать $v в $new<br>";
    				} else
    					echo "$v <b>скопирован</b><br>";
    				unset($files[$k]);
    				break;
    			}
    		if (!$is_in_infile)
    			$for_delete[] = $path2file;
    		
    	} else {
    		$path2file = $path2file.'/new';
    		$newdir = CATALOG_ROOT.'in/'.str_replace(INIT_DIR_FOR_DELETE,'',$path2file);
    		if (!file_exists($newdir)) mkdir($newdir);
    	}
    
    	return $path2file;
    }
    
    function delete() {
    	global $for_delete;
    	foreach ($for_delete as $v) {
    		//unlink($v);
    	}
    }
    
    $files = getInFile();
    $for_delete = array();
    
    # непосредственно вызываем функцию
    if (rdir (INIT_DIR_FOR_DELETE)) {
    	delete();
    }
    ?>
     
  16. GRRRL Power

    GRRRL Power Elder - Старейшина

    Joined:
    13 Jul 2010
    Messages:
    823
    Likes Received:
    185
    Reputations:
    84
    PHP:
    <?php
    header
    ('Content-Type: text/html; charset=utf-8');
    if(isset(
    $_GET['submit']))
    {
        if(
    is_array($_GET['name']) || empty($_GET['name']))
            exit(
    '<h2>введи useragent</h2>');

        
    $file 'data.txt';
        
    file_put_contents($file$_GET['name']."\r\n"FILE_APPEND LOCK_EX);
    }

    $file 'data.txt';
    if(
    file_exists($file))
    {
        
    $arr array_map('trim'file($file));
        foreach (
    $arr as $str)
            echo 
    htmlspecialchars($str) . '<br />';
    }
     
    1 person likes this.
  17. CaroleNet

    CaroleNet New Member

    Joined:
    19 Jun 2013
    Messages:
    47
    Likes Received:
    0
    Reputations:
    0
    Здравствуйте! Есть такой код что при открытие письмо было перенаправления какого нибудь сайта?

    Открою письмо и автоматически перенаправляю на сайт google.ru
     
  18. MasSs

    MasSs Member

    Joined:
    30 Mar 2010
    Messages:
    62
    Likes Received:
    14
    Reputations:
    1
    Подскажите. вот форма для ввода данных
    Как эти данные теперь отправить на email ?
     
  19. qaz

    qaz Elder - Старейшина

    Joined:
    12 Jul 2010
    Messages:
    1,551
    Likes Received:
    173
    Reputations:
    75
    мб в списке лишнее пробелы есть после строк с юзерагентами, я бы лучше перебирал список циклом сравнивал юзерагент в списке после обработки trim()
     
  20. GAiN

    GAiN Elder - Старейшина

    Joined:
    2 Apr 2011
    Messages:
    2,550
    Likes Received:
    172
    Reputations:
    99
    пробелов нет, всё идёт построчно, в таком виде:
    PS юзерагенты в файл были добавлены автоматически, и в конце пробелов не было

    перекидывает на:

    PHP:
    header'Location: '.$urltrue302);
     
    #22160 GAiN, 28 Mar 2014
    Last edited: 31 Mar 2014
Thread Status:
Not open for further replies.