Was soll denn auch !=> bewirken? Vielleicht meinst du ja <=.
Beiträge von Klemmlampe
-
-
Javascript - eindeutig. Sehr sehr simple Syntax, universell einsetzbar und dennoch eine starke Ähnlichkeit zu C, was das spätere Erlernen von weiteren Sprachen erleichtert.
-
Aus einem älteren Projekt:
Dynamische Signatur mit Symfony2, Propel1 und Imageworkshop ("sybio/image-workshop": "dev-master").Controller
PHP
Alles anzeigen<?php // src/Server/Roleplay/CharacterBundle/Controller/SignatureController.php namespace Server\Roleplay\CharacterBundle\Controller; use Symfony\Bundle\FrameworkBundle\Controller\Controller; use Symfony\Component\HttpFoundation\Response; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Cache; use Model\RoleplayCharacterQuery; use Model\RoleplayAchievementQuery; use Server\Roleplay\CharacterBundle\Signature; class SignatureController extends Controller { const HANDLER_NAMESPACE = 'Server\\Roleplay\\CharacterBundle\\Signature'; const CACHE_TIME = 240; // caching: 240s = 4m /** * @Route("signature/{signature}/{pre_name}-{last_name}.png", name="roleplay_character_signature") * @ParamConverter("RoleplayCharacter") * @Cache(smaxage="240") */ public function viewAction($signature, $pre_name, $last_name) { $signature = ucfirst($signature); // replace by cache handler, sometime... $filename = $pre_name . '_' . $last_name . '_' . $signature . '.png'; $dir = $this->container->getParameter("cache_dir") . '/signature'; $file = $dir . '/' . $filename; if(!file_exists($file) || time() - self::CACHE_TIME >= filemtime($file) || in_array($this->get('kernel')->getEnvironment(), array('test', 'dev')) ) { $character = RoleplayCharacterQuery::create() // ANPASSEN? ->filterByPreName($pre_name) ->filterByLastName($last_name) ->findOne(); $class = self::HANDLER_NAMESPACE . '\\' . $signature . 'Signature'; $image = new $class($character, $this->container); if (!($image instanceof self::HANDLER_NAMESPACE . '\\SignatureInterface') { throw new \Exception('Signaturehandlers must implement ' . self::HANDLER_NAMESPACE . '\\SignatureInterface'); } $layer = $image->getLayer(); $layer->save($dir, $filename, true, null, 95); } return new Response(file_get_contents($file), 200, array( 'Content-Type' => 'image/png', )); } }
SignatureInterface
PHP
Alles anzeigen<?php // src/Server/Roleplay/CharacterBundle/Signature/SignatureInterface.php namespace Server\Roleplay\CharacterBundle\Signature; use Symfony\Component\DependencyInjection\ContainerInterface; interface SignatureInterface { const FONT_PATH = '../../Resources/signatures/font'; const BACKGROUND_PATH = '../../Resources/signatures/background'; public function __construct($character, ContainerInterface $container); public function getLayer(); }
Beispiel-Handler
PHP
Alles anzeigen<?php // src/Server/Roleplay/CharacterBundle/Signature/TestSignature.php namespace Server\Roleplay\CharacterBundle\Signature; use Symfony\Component\DependencyInjection\ContainerInterface; use Server\Roleplay\CharacterBundle\Signature\SignatureInterface; use PHPImageWorkshop\ImageWorkshop; use Model\RoleplayAchievementQuery; class SanFierroSignature implements SignatureInterface { protected $container; protected $translator; protected $kernel; protected $layer; protected $character; public function __construct($character, ContainerInterface $container) { $this->character = $character; $this->container = $container; $this->translator = $container->get('translator'); $this->kernel = $container->get('kernel'); $this->layer = ImageWorkshop::initFromPath($this->getBackgroundFile()); // Playername $nameLayer = ImageWorkshop::initTextLayer( $character->getPreName() . ' ' . $character->getLastName(), $this->getFontFile(), 11, 'ffffff', 0 ); $this->layer->addLayerOnTop($nameLayer, 12, 36, "LB"); // Skin $skinLayer = ImageWorkshop::initFromPath($this->getSkinFile($character->getSkin())); $this->layer->addLayerOnTop($skinLayer, 10, 10, "LT"); $this->printAchievement(); } private function printAchievement() { // Achievement $achievement = RoleplayAchievementQuery::create() ->filterByCharacterId($this->character->getId()) ->orderByTime(\Criteria::DESC) ->findOne(); $achievementName = $this->translator ->trans('achievement.' . $achievement ->getRoleplayAchievementItem() ->getName() ); $path = $this->kernel->locateResource('@ServerRoleplayCharacterBundle/Resources/public/icon/achievementM.png'); $achievementIcon = ImageWorkshop::initFromPath($path); $this->layer->addLayerOnTop($achievementIcon, 12, 8, "LB"); $achievementLayer = ImageWorkshop::initTextLayer($achievementName . ' (+ ' . $achievement->getExperiencePoints() . ' EXP)', $this->getFontFile(), 11, 'ffffff', 0); $this->layer->addLayerOnTop($achievementLayer, 46, 10, "LB"); } public function getLayer() { return $this->layer; } public function getBackgroundFile() { return realpath(__DIR__ . self::BACKGROUND_PATH . '/san-fierro.png'); } public function getFontFile() { return realpath(__DIR__ . self::FONT_PATH . '/Sansation_Regular.ttf'); } public function getSkinFile($skin) { $util = $this->container->get('samp_util'); $skin = ($util->isValidSkin($skin) ? $skin : 0); $path = $this->kernel->locateResource('@BaseCoreBundle/Resources/public/skin/' . $skin . '.png'); return realpath($path); } }
Hintergründe und Fonts in Resources/signatures/background bzw. Resources/signatures/font.
Sieht letztendlich so aus: Beispiel
Der Code wird so nicht ohne Anpassungen lauffähig sein, da er eben auf dieses Projekt abgestimmt war, aber ich denke er dient als gute Grundlage für eine saubere Lösung dafür in Symfony2.
----------
SampServerInstaller
Eine kleine Klasse, mit der es möglich ist, Server im Handumdrehen herunterzuladen und/oder zu installieren (entpacken) - oder einfach nur um die aktuelle Version herauszufinden.PHP
Alles anzeigen<?php /*interface ServerInstallerInterface { public function getName(); public function getDownloadUrl($version = null); public function getLatestVersion(); public function download($dir = null, $version = null); public function install($dir = null, $version = null); }*/ class SampServerInstaller/* implements ServerInstallerInterface*/ { const DEPLOY_PAGE = "http://files.sa-mp.com/?C=M;O=D"; const DOWNLOAD_PREFIX = "http://files.sa-mp.com"; const VERSION_NAME_PATTERN = "/samp(\w+)svr_(\w+).tar.gz/is"; const VERSION_DOWNLOAD_PATTERN = "samp%ssvr%s.tar.gz"; public function getName() { return "Samp"; } public function getDownloadUrl($version = null) { if (null == $version) { $version = $this->getLatestVersion(true); } else { $version = $this->versionToDownload($version); } return self::DOWNLOAD_PREFIX."/{$version}"; } public function getLatestVersion($download = false) { $content = file_get_contents(self::DEPLOY_PAGE); preg_match(self::VERSION_NAME_PATTERN, $content, $matches); if (true == $download && isset($matches[0])) { return $matches[0]; } $return = ""; // Version if (isset($matches[1])) { $return .= $matches[1]; } // Release if (isset($matches[2])) { $return .= "-{$matches[2]}"; } if (!$return) { $return = isset($matches[0]) ? "" : $matches[0]; } return $return; } public function install($dir = null, $version = null) { return $this->unpack($this->download($dir, $version)); } public function download($dir = null, $version = null) { $url = $this->getDownloadUrl($version); if (null == $dir) { $dir = __DIR__; } $file = "{$dir}/".substr($url, strlen(self::DOWNLOAD_PREFIX)+1); if (false === $get = file_get_contents($url)) { throw new \Exception("Unsupported version ({$version}) or download url ({$url})"); } file_put_contents($file, $get); return $file; } public function unpack($file, $to = null) { try { if (strlen($file)-3 == strpos($file, ".gz")) { $gz = true; $decompressor = new PharData($file); $decompressor->decompress(); $file = substr($file, 0, -strlen(".gz")); } if (null == $to) { $to = substr($file, 0, -strlen(".tar")); } if (!is_dir($to)) { mkdir($to); } $unpacker = new PharData($file); $unpacker->extractTo($to); } catch (\Exception $e) { throw new \Exception("Error while unpacking ({$e->getMessage()}"); } if ($gz) { @unlink($file); } return $to; } protected function versionToDownload($version) { $delimeters = array(" ", "-", "_"); $release = ""; foreach($delimeters as $delimeter) { if (false !== strpos($version, $delimeter)) { list($version, $release) = explode($delimeter, $version); } } if ($release) { $release = "_{$release}"; } return sprintf(self::VERSION_DOWNLOAD_PATTERN, $version, $release); } }
Benutzung:
PHP<?php $installer = new SampServerInstaller(); echo "Aktuelle Version: {$installer->getLatestVersion()}, Download: {$installer->getLatestVersion(true)}<br>"; echo "Version 0.3e-R2, Download: {$installer->getDownloadUrl("0.3e-R2")}<br>"; // $installer->install(); // install latest server // $installer->download(); // download latest server // $installer->install(null, "0.3e-R2"); // install 0.3e-R2 server
----------
SampConfig
PHP
Alles anzeigen<?php class SampConfig { protected $content = array(); public function __construct($content) { $this->content = self::parse($content); } public function getRaw() { return $this->content; } public function get($key = null) { if (null == $key) { return self::compose($this->getRaw()); } if (!isset($this->content[$key])) { throw new \Exception('Unknown configuration key "' . $key . '"'); } return $this->content[$key]; } public function set($key, $value) { if (!is_string($value) && !is_integer($value) && !is_array($value)) { throw new \Exception('Invalid value "' . $value . '" for key "' . $key . '"'); } if (is_array($value)) { $this->content[$key] = implode(' ', $value); } else { $this->content[$key] = $value; } return $this; } public function __invoke($key = null) { return $this->get($key); } public function __get($key) { return $this->get($key); } public function __set($key, $value) { return $this->set($key, $value); } public function __call($function, $parameters) { if (strlen($function) > 3) { $key = self::snake(lcfirst(substr($function, 3, strlen($function)))); $type = substr($function, 0, 3); if ('set' == $type && count($parameters) >= 1) { $this->set($key, $parameters[0]); } else { return $this->get($key); } } return $this; } public function __toString() { return $this->get(); } public static function parse($content) { $content = explode("<br />", nl2br($content)); $content = array_map(function($n) { $position = strpos($n, " "); if (false !== $position) { $n = substr_replace($n, "=", $position, 1); } return trim($n); }, $content); return parse_ini_string(implode("\n", $content)); } public static function compose(array $config) { $return = ''; foreach ($config as $key => $value) { $return .= $key . ' ' . $value . "\r\n"; } return $return; } // http://laravel.com/api/source-class-Illuminate.Support.Str.html#279 public static function snake($value, $delimiter = '_') { $replace = '$1'.$delimiter.'$2'; return ctype_lower($value) ? $value : strtolower(preg_replace('/(.)([A-Z])/', $replace, $value)); } }
Anwendung:
PHP
Alles anzeigen$config = new SampConfig(file_get_contents(__DIR__ . '/server.cfg')); // ausgeben echo $config; // anpassen echo $config ->setMaxplayers(125) ->setRconPassword('changed') ->setPlugins(array('samphp', 'irc', 'socket')); // erneut ausgeben echo $config; // Wert holen echo $config->get('maxplayers'); // oder echo $config->maxplayers; // oder echo $config->getMaxplayers(); // oder echo $config('maxplayers');
-
Ich befinde mich im ordner "var/www/ucp/"
und will dahin "root/samp03/server.cfg"
Warum dann nicht einfach den Absoluten Pfad "/root/samp03/server.cfg"? Zum debuggen kannst du dir mal realpath('../../../root/samp03') ausgeben lassen. Ich denke aber noch immer, dass es eher an den Berechtigungen liegt.
-
Gesamter Code dazu?
-
Stimmen die Berechtigungen?
Kannst auch mal in den nützlichen Codeschnipseln schauen, hab eben schnell eine Klasse, basierend auf meiner alten Funktion, gebaut, die die Arbeit ein wenig erleichtert.
-
Stimmt der Pfad denn?
-
-
Was haben denn Prozentangaben mit responsivem Webdesign zu tun? Wesentlicher Bestandteil, genau genommen die Grundlage, für responsives Webdesign sind Media Queries - und keine ollen Prozentangaben. Keine Ahnung, wer euch diesen Floh in den Kopf gesetzt hat.
-
Daran liegt es nicht.
Doch, denn mit dem richtigen Abstand da, sparst du dir dein Gemurks mit negativem Margin und !important.
-
-
Du musst nicht zwangsweise auf PDO umsteigen, aber zumindest weg von der alten MySQL-Extension.
-
-
Und was daran ist nun besser, außer dass du PDO verwendest? Das ist so pseudo professionell, zum lernen absolut kontraproduktiv.
Aber wie gesagt mysql_real_escape_string() hilft nicht wirklich!
Doch, natürlich. PDO macht intern auch nichts anderes als die Parameter für Statements zu escapen.Man sollte aber aus ganz anderen Gründen die MySQL-Extension mehr nutzen: Deprecated und inzwischen, seit 5.5, entfernt.
Wenn wir schon beim Thema sind, hier ein wenig Lektüre: http://code.tutsplus.com/tutor…should-you-use--net-24059
Und nun ist auch mal Ende mit dem ganzen Geschwafel, das Problem ist gelöst.
-
Wie sieht es mit debuggen aus? Bist du dir sicher, dass das Passwort plain, sprich unverschlüsselt oder gehasht, in der Datenbank steht?
-
Responsive Webdesign -> Media Queries. Google hilft dir sicher.
-
Wie schon gesagt wurde: Ärztlichen Rat aufsuchen.
Siehe auch:
Verboten sind im gesamten Board (Beiträge, Signatur, Avatar und Benutzertitel) insbesondere [...] Rechtsfragen und Rechtsberatung sowie Fragen und Beratung zu Fachgebieten, die in der Regel nur entgeltlich oder durch qualifizierte Personen beantwortet werden [...]
-
wenn du kein fanatiker neuer software bist, wirste mit dem zopo zufrieden. aber merke das du dafür nur im seltestem fall eine custom rom
bekommsthttp://www.needrom.com/?s=zopo+zp998&sa=search&scat=21 Okay - da ist keines wirklich custom, aber damit kann man leben.
und ein update eig. ausgeschlossen ist.
Seit ich es habe, gab es zwei Updates - und ich habe es erst seit knapp 1 1/2 Monaten. Und ja, das waren auch Featureupdates, aber inwiefern du recht hast ist, dass es noch immer auf 4.2 läuft.
zudem gibt es günstigere china-modelle
Das mag sein, aber keine wirklich vergleichbaren (Qualität/Leistung).
achso und besonders schnell ist der 8kern auch nicht
Schnell genug, um im Antutu-Benchmark knapp 32.000 Punkte zu machen.
EDIT: achja und wo ist das zopo einfach zu bekommen? das wird aus china geliefert und wird versteuert. für 270€ bekommste es aufjedenfall nicht...^^
Doch, insgesamt habe ich 267 und ein paar zerquetschte bezahlt.
-
Das steht doch sogar im Löschgrund. Das nächste mal ließt du dir bitte den Grund durch oder kontaktierst das entsprechende Teammitglied direkt.
Edit: Und achtest bei deiner Kritik auf den richtigen Bereich.
-
Wordpress (siehe Quelltext).