Announcement

Collapse
No announcement yet.

Problem mit PHP Erweiterungen (mittels Cairo Bibliotheken)

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Problem mit PHP Erweiterungen (mittels Cairo Bibliotheken)

    Hallo,

    ich will für linux eine PHP Erweiterung in C++ schreiben, welche die Graphikbibliothek (-funktionen) Cairo aufruft (www.cairographics.org) dabei stütze ich mich auf diesen Link - es klappt auch alles wunderbar, nur wenn ich dann eine PHP Datei erstelle, welche diese Methoden aufruft, bekomme ich lediglich ein Popup, welches mich fragt, wohin ich die .php Datei speichern möchte. Ich habe bis jetzt nur herausgefunden, dass dies nur passiert, wenn ich in der .php Datei Funktionen aufrufe, welche Cairofunktionen verwenden - andere Methoden, ohne irgendwelche cairo funktionen, funktionieren ohne probleme. könnte es evtl. daran liegen, dass ich einfach in den source ordner (mein extension ordner im php sourcetree) die headerfiles zu cairo hineinkopiert habe? also der compiler hat zuerst die headerdateien nicht gefunden, deshalb habe ich sie einfach in den ordner reinkopiert, aber jetzt scheint alles zu passen und es wird auch ohne irgenwas kompiliert.

    hier noch ein kleiner codeauszug der funktion, welche cairo aufruft:

    Code:
    PHP_FUNCTION(paint_with_cairo)
    {
        long shape = 0;
    
    
    
    	if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &shape) == FAILURE) {
    
    		RETURN_NULL();
    
    	}
    
    
    	cairo_t *cr;
    
    	cairo_surface_t *surface;
    
    	int x, y, count_rows,i;
    
    	int width, height = 100;
    
    	//surface = (cairo_surface_t *) cairo_svg_surface_create("Cairo_example.png", 1000.0, 1000.0);
    
    	surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32,2000,2000);
    
    
    
    	//surface = (cairo_surface_t *) ("Cairo_example.svg", 2000.0, 2000.0);
    
    	cr = cairo_create(surface);
    
    
    
    	y = 1;
    
    	count_rows = 0;
    
    		for (i = 0; i < (numShapes); i++){
    
    
    
    			if(count_rows > 10){
    
    					y++;
    
    					x = 0;
    
    					count_rows = 0;
    
    				}
    
    
    
    			if(shape == 0){
    
    				cairo_rectangle(cr, x * 90, y * 70, 80, 55);
    
    
    
    			}else if(shape == 1){
    
    				
    
    				
    
    				 cairo_set_source_rgb(cr, 0.4, 0.5, 0.5);
    
    				 cairo_arc(cr, x*120+60, y*120+60, 60, 0, 2*M_PI);
    
    				 cairo_stroke_preserve(cr);
    
    				 cairo_set_source_rgb(cr, 0.5, 0.2, 0.1);
    
    				 cairo_fill(cr);
    
    
    
    
    
    			}else{
    
    				 cairo_move_to(cr, 80*x, 80*y);
    
    				cairo_set_source_rgb(cr, 0.4, 0.5, 0.5);
    
    				cairo_line_to(cr, 80*x, (80*y)+75);
    
    				cairo_line_to(cr, (80*x)+75, (80*y));
    
    				cairo_line_to(cr, 80*x, 80*y);
    
    				cairo_close_path(cr);
    
    
    
    			}
    
    			x++;
    
    			count_rows++;
    
    	}
    
    
    
    	cairo_fill(cr);
    
    
    
    	//cairo_set_source_rgb(cr, 0, 0, 0);
    
    
    
    	cairo_surface_write_to_png(surface,"/opt/lampp/lampp/htdocs/bla/c_example.png");
    
    
    
    	cairo_destroy(cr);
    
    
    
    	cairo_surface_destroy(surface);
    }


    würd mich freuen, wenn mir da jmd helfen könnte!

    lg + frohe weihnachten

    into
Working...
X