AJAX tarafından çağrıldığını bir PHP dosyası ayıklama nasıl?

6 Cevap php

Ben (bu, resmi yükler kendi üzerlerine oluşturur ve ayrıca resim filigran ekler) bir resim yüklemek için bir php dosyası var. Dosya AJAX tarafından çağrılan ediliyor.

Bu WAMPServer 2.0 ile Windows XP'de benim localhost üzerinde çalışıyordu. Şimdi Windows Vista yüklü ve aniden (resim yükledi alır ama küçük ve filigran parçaları işe yaramayan) düzgün çalışmıyor.

Benim yerel makinede (WAMPServer 2.0) uygulamasını test etmek için tam olarak aynı yazılımı kullanıyorum henüz çalışmıyor.

Bu dosyayı ayıklama nasıl? İşte böyle görünüyor:

<?php

define('BASE_PATH', substr(dirname(dirname(__FILE__)), 0, -22));

// set the include path
set_include_path(BASE_PATH
                 . '/../../library'
                 . PATH_SEPARATOR
                 . BASE_PATH
                 . '/library'
                 . PATH_SEPARATOR
                 . get_include_path());

// autoload classes from the library
function __autoload($class) {
    include str_replace('_', '/', $class) . '.php';
}

$configuration = new Zend_Config_Ini(BASE_PATH
                                     . '/application'
                                     . '/configs/application.ini',
                                     'development');
$dbAdapter = Zend_Db::factory($configuration->database);
Zend_Db_Table_Abstract::setDefaultAdapter($dbAdapter);

function _getTable($table)
{
    include BASE_PATH
    . '/application/modules/default/models/'
    . $table
    . '.php';
    return new $table();
}

$albums = _getTable('Albums');
$media = _getTable('Media');

if (false === empty($_FILES)) {

    $tempFile = $_FILES['Filedata']['tmp_name'];
    $extension = end(explode('.', $_FILES['Filedata']['name']));

    // insert temporary row into the database
    $data = array();
    $data['type'] = 'photo';
    $data['type2'] = 'public';
    $data['status'] = 'temporary';
    $data['user_id'] = $_REQUEST['user_id'];
    $paths = $media->add($data, $extension, $dbAdapter);

    // save the photo
    move_uploaded_file($tempFile,
                       BASE_PATH . '/public/' . $paths[0]);

    // create a thumbnail
    include BASE_PATH . '/library/My/PHPThumbnailer/ThumbLib.inc.php';
    $thumb = PhpThumbFactory::create('/' . $paths[0]);
    $thumb->adaptiveResize(85, 85);
    $thumb->save(BASE_PATH . '/public/' . $paths[1]);

    // add watermark to the bottom right corner
    $pathToFullImage = BASE_PATH . '/public/' . $paths[0];
    $size = getimagesize($pathToFullImage);
    switch ($extension) {
        case 'gif':
            $im = imagecreatefromgif($pathToFullImage);
            break;
        case 'jpg':
            $im = imagecreatefromjpeg($pathToFullImage);
            break;
        case 'png':
            $im = imagecreatefrompng($pathToFullImage);
            break;
    }
    if (false !== $im) {
        $white = imagecolorallocate($im, 255, 255, 255);
        $font = BASE_PATH . '/public/fonts/arial.ttf';
        imagefttext($im,
                    13, // font size
                    0, // angle
                    $size[0] - 132, // x axis (top left is [0, 0])
                    $size[1] - 13, // y axis
                    $white,
                    $font,
                    'HunnyHive.com');
        switch ($extension) {
            case 'gif':
                imagegif($im, $pathToFullImage);
                break;
            case 'jpg':
                imagejpeg($im, $pathToFullImage, 100);
                break;
            case 'png':
                imagepng($im, $pathToFullImage, 0);
                break;
        }
        imagedestroy($im);
    }

    echo "1";

}

6 Cevap

AJAX ile ilgili bir şey ayıklarken ben şunları tavsiye ederim:

  • Dosya çevresinde herhangi bir AJAX paketsiz doğru verileri dönen emin olun. Bazı örnek verilerle doğrudan dosyayı arayın. Ne gerekir çıkmıyor? Sözdizimi hataları var mı? Bu kontrol ve size baş ağrısı bir ton kurtaracak istediğiniz ilk şey.

  • Senin Javascript doğru veri ayrıştırma emin olun. Sizin JS JSON bekliyor olabilir, ancak XML dönen konum, ya da iade veri düşündüğünüz şekilde biçimlendirilmiş değil, ya da bunu fiilen kullanılan böylece Javascript içinde döndürülen verileri değerlendirmek gerekebilir. Veri neye benzediğini test etmek için bazı console.log () 'ın sahipsiniz.

  • Postbin POST veri göndermek sağlar gibi bir şey deneyin. Lütfen POST verilerin doğru olduğundan emin olun ve size komut için doğru veri yolluyorlar.

Genellikle bu hata ayıklama için, fonksiyonlara adımları yıkmak gerektiğini ve sırayla her bölümü test.

Ajax hata ayıklama ile ilgili olarak, size Zend_Log_Writer_FirePHP denemek isteyebilirsiniz. Bu cevap gövdesinde veri ayıklama çıkışı içermiyor demektir, PHP tarafından gönderilen başlıklarını ekstra veri okur ve görüntüler gibi şeyler için, hala kılınabilir Kundakçı için bir uzantısıdır.

Kurduktan sonra FirePHP Kundakçı için, sadece şu birkaç satır yazabilirim:

$wFirebug = new Zend_Log_Writer_Firebug();

$firebug = new Zend_Log($wFirebug);

$firebug->info($myArray);

$firebug->info('Got to line 10');

Sen sadece bir dosya girişi ile basit bir form oluşturmak ve sadece kolay test için bunu kullanabilirsiniz.

Yani başkası aklında daha iyi bir şey olabilir, ben görmek basit yoludur.

Ben ZF AJAX aracılığıyla çağrılan bir eylem ile çalışırken, bu eylem ilk without AJAX çalıştığından emin olmak için her zaman iyi bir fikir olduğunu bulmak. Yani yapıyoruz eylemi temsil edecek yeni bir sayfaya gidiyor özelliği sonucu yakalanma ilk yineleme yapmak olduğunu.

Eğer PHP kodu çalıştığını biliyorum, daha sonra AJAX şeyler iş yapma konusunda endişelenmenize başlayabilirsiniz. Benim düşünceme göre, en azından çıkış Zend_Debug edememek :: dökümü () değişkenler başka bir sayfa ilk gelişimi için çok kolaydır görüntülediğinizde.

Tasarım AJAX yapabilirsiniz zor bunu yapmak için yapar donukluk bir tabaka oluşturur. Eğer, örneğin, ile sadece nedense almıyorum biçimlendirilmiş verileri gerektiren bir jQuery eklentisi arabirim eğer o bile zor alır. Yani yine, PHP birinci, ikinci AJAX. Bu bir AJAX çağrısına bir PHP gitmek ZF kabaca iki saniye sürer, ve tersi.

Kolay çözüm FirePHP kullanmak olacaktır; kundakçı + firefox için FirePHP addon yüklemek ve projeye sınıfları içerir.

(I / usr / share / php FirePHP kütüphanesi tutmak / bu yüzden herhangi bir projede kolayca dahil edebilirsiniz)

Sonra sadece bunu:

require_once('/path/to/FirePHPCore/FirePHP.class.php');
$fp = FirePHP::getInstance(true);
$fp->log('you can put anything here, vars, objects, arrays, etc');

Bu kundakçı konsolunda çıkış yanıtı olacak ve ekolar kodunuzu kirletmeden çok daha iyi olduğunu ve ajax ayıklarken var_dumps!

Veri PHP işlevi (echo'd) iade denetleyen bir geri arama fonksiyonu ile AJAX isteği yapmak. Veri echo'd bazı ön-belirlenmiş başarı dize ("başarı"?) Ise, o zaman tüm bu değilse, bir uyarı veya bir şey fonksiyonunun çıkışı ne olursa olsun geri çağırma işlevi çıkışı var, iyi.