Chargement de la page...

wopa Domino wopa wopa Le moteur de recherche communautaire
👤
Connexion

http://r.je

Analyse de la page d'accueil du site

<!DOCTYPE html>
<html lang="en">
	<head>
		<link href="/3.1.css" rel="stylesheet" type="text/css" media="screen" />
		<link rel="manifest" href="/manifest.json" />
		<meta name="description" content="Tom Butler's Programming Blog - MVC in PHP, Best Practices, Separation of Concerns" />
		<meta name="viewport" content="width=device-width, initial-scale=1" />
		<meta name="theme-color" content="#016391" />
		<title>Tom's PHP programming blog</title>

	</head>


	<body>
	

		<header>

			<h1><a href="/">Tom Butler's programming blog</a></h1>


			<nav>
			<ul>
				<li><a href="/">Home</a></li>
				<li><a href="#code">Code</a></li>
				<li><a href="#articles">Articles</a></li>
				<li><a href="/about">About</a></li>
				<li><a href="/contact">Contact</a></li>

			</ul>
			</nav>
		</header>
		<main>
			
	<article class="home"><h1>Tom Butler's Programming Blog - PHP, MVC and Best Practices</h1><section><div><p>Welcome to my infrequently maintained and often forgotten blog.
				I'm a web developer andUniversity Lecturer with an interest in OOP, coding best practices
				and a huge advocate of <em>convention over configuration</em> and <em>separation of concerns</em>.
				I started this blog to reduce the need to repeat myself in discussions regarding  MVC, however the response
				has been very positive over the years so I've expanded it gradually to other topics which have sparked my interest.
				</p><p>I've released some moderately successful open source software:</p><ul><li><a href="https://github.com/Level-2/Transphporm">Transphporm</a>: A novel templating system which is unique in that it genuiely separates logic from markup</li><li><a href="/dice">Dice</a>: A rule based Dependency Injection Container</li><li><a href="https://github.com/Level-2/Maphper">Maphper</a>: an ORM with a focus on extensibility</li></ul><p>I recently completed my PhD in Software Engineering in which I developed a novel metric for grading software flexibility based on frequency of bad practices detected. 
                   As part of my research I developed the tool <a href="https://insphpect.com">Insphpect</a> which uses a mix of static and dynamic 
		analysis techniques to identify programming practices which hinder flexiblity, grades the code and offers recommendations on how it can be improved. 
		As proof of concept in a number of cases it can also offer automated fixes.</p></div></section><section><div><h2>Latest updates</h2><ul><li>09/07/2024 - <a href="/evict-your-darlings">Evict Your Darlings: Banish dotfiles from your home directory</a></li><li>12/04/2021 - <a href="/vje-docker-virtual-server">v.je - an Easy to set up development environment for Docker</a></li><li>12/04/2021 - <a href="/why-are-you-still-using-xampp">Why are you still using XAMPP?</a></li><li>03/02/2021 - <a href="https://www.sitepoint.com/docker-php-development-environment/">Setting Up a Modern PHP Development Environment with Docker (published on sitepoint.com)</a></li><li>20/12/2020 - <a href="/dont-ditch-centos-yet">It's probably not time ditch CentOS for your server</a></li><li>23/04/2020 - <a href="/sendmail-php-docker">How to get sendmail working in docker PHP</a></li><li>08/03/2020 - <a href="/11-things-you-forgot-server-setup">11 things you may have overlooked when you made your website live</a></li><li>17/03/2019 - <a href="/eliminate-render-blocking-css-pagespeed">Eliminate Render Blocking CSS using HTTP/2 Push</a></li><li>17/03/2019 - <a href="/http2-push-cache-css-reload">Forcing a browser CSS cache reload with HTTP/2 Server Push</a></li><li>10/03/2019 - <a href="immutable-mvc-crud-application">Immutable MVC in PHP (Part 2) - Immutable CRUD application</a></li><li>20/02/2019 - <a href="immutable-mvc-in-php">Immutable MVC: MVC In PHP 2019 Edition (Part 1)</a></li><li>13/11/2018 - <a href="guide-lets-encrypt-certificate-for-local-development">Guide: Using Let's Encrypt SSL Certificates for local or network server</a></li><li>13/11/2018 - <a href="openvpn-nat">Routing all traffic through an OpenVPN client on a CentOS 7 NAT</a></li><li>29/09/2018 - <a href="become-a-better-programmer">Put the pro in programmer: A guide to writing better code</a></li><li>17/08/2018 - <a href="you-do-not-need-inheritance-oop">Inheritance vs Composition: Composition wins by knockout</a></li><li>01/08/2018 - <a href="immutability-encapsulation-schrodingers-immutability">Immutability vs Encapsulation: Schrödinger's immutability</a></li><li>07/06/2018 - <a href="git-forked-decentralised-ecosystem">Git Forked: The decentralised but better connected git ecosystem I'd like to see</a></li></ul></div></section><section><div><h2>Code</h2><ul><li><a href="dice">Dice - A minimalist Dependency Injection Container for PHP</a></li><li><a href="transphporm-php-templates">Transphporm - A new approach for PHP templating</a></li><li><a href="introduction-to-maphper">Maphper - A n ORM with an array like API.</a></li><li><a href="css3-in-ie">CSS3 in Internet Explorer</a></li></ul></div></section><section><div><h2>MVC Related Articles</h2><ul><li>Model-View-Confusion
						<ol><li><a href="views-are-not-templates">The View gets its own data from the Model</a></li><li><a href="view-helpers">Maximising View reusability with View Helpers</a></li></ol>

					</li><li>
						MVC In PHP
						<ol><li><a href="immutable-mvc-in-php">Immutable MVC: MVC In PHP 2019 Edition (Part 1)</a></li><li><a href="immutable-mvc-crud-application">Immutable MVC in PHP (Part 2) - Immutable CRUD application</a></li><li><a href="mvc-in-php">Hello World</a></li><li><a href="mvc-tutorial-real-application-example">Real world example (part 1)</a></li><li><a href="mvc-php-front-controller">Deploying MVC on the web</a></li><li><a href="mvc-php-router-dependency-injection">Create a router using Dependency Injection</a></li></ol>
					</li><li>MVVM
						<ul><li><a href="evolving-mvc-into-mvvm">MVVM, MVC it's all just roman numerals to me</a></li></ul>
					</li></ul></div></section><section><div><h2>Dependencies in code</h2><ul><li><a href="constructor-injection-vs-setter-injection">Constructor Injection vs Setter Injection</a></li><li><a href="oop-courier-anti-pattern">The "courier" anti-pattern.</a></li><li><a href="static-methods-bad-practice">Are Static Methods/Variables bad practice?</a></li></ul></div></section><section><div><h2>Best Practices</h2><ul><li><a href="immutability-encapsulation-schrodingers-immutability">
								Immutability vs Encapsulation: Schrödinger's immutability</a></li><li><a href="encapsulation-dont-look-up">Encapsulation: Don't Look Up</a></li><li><a href="this-keyword-isnt-oop">The $this variable isn't as Object-Oriented as you think it is</a></li><li><a href="creative-ways-of-breaking-encapsulation">Finding creative ways to break encapsulation isn't clever</a></li><li><a href="php-annotations-are-an-abomination">PHP: Annotations are an abomination</a></li><li><a href="empty-interfaces-bad-practice">Empty interfaces are bad practice</a></li><li><a href="sprintf">Stop the sprinf() abuse</a></li></ul></div></section><section><div><h2>Put the pro in programmer</h2><ul><li><a href="become-a-better-programmer">A guide to writing better code</a></li><li><a href="hazard-1-90-percent-of-everything-is-crap">Hazard 1: 90% of everything is crap</a></li><li><a href="hazard-2-but-ive-always-done-it-this-way">Hazard 2: I've always done it that way</a></li><li><a href="hazard-3-cool">Hazard 3: COOL!</a></li><li><a href="hazard-4-you-are-not-clairvoyant">Hazard 4: You are not clairvoyant</a></li></ul></div></section><section><div><h2>Programming Philosophy</h2><ul><li><a href="is-programming-art">Is programming an art form?</a></li><li><a href="importance-of-correct-terminology">The importance of getting terminology correct</a></li></ul></div></section><section><div><h2>Git Forked</h2><ul><li><a href="git-forked-goodbye-github">Git Forked: Goodbye GitHub, you'll be briefly missed</a></li><li><a href="git-forked-decentralised-ecosystem">Git Forked: The decentralised but better connected git ecosystem I'd like to see</a></li></ul></div></section><section><div><h2>Server Administration</h2><ul><li><a href="/dont-ditch-centos-yet">It's probably not time ditch CentOS for your server</a></li><li><a href="11-things-you-forgot-server-setup">11 things you may have overlooked when you made your website live</a></li><li><a href="guide-lets-encrypt-certificate-for-local-development">Guide: Using Let's Encrypt SSL Certificates for local or network server</a></li><li><a href="openvpn-nat">Routing all traffic through an OpenVPN client on a CentOS 7 NAT</a></li></ul></div></section><section><div><h2>Other</h2><ul><li><a href="php-mysql-novice-to-ninja">PHP &amp; MySQL - Novice to Ninja, now available!</a></li><li><a href="4-reasons-to-avoid-foreign-key-constraints-database-logic">4 reasons you should not have logic in your database (cascade delete, foreign key constraints, triggers, etc)</a></li><li><a href="google-analytics-costing-you-sales">Google Analytics And Fonts Are Probably Costing You In Lost Sales</a></li><li><a href="vje-minimal-virtual-server">v.je - a 97mb minimal web development virtual machine</a></li><li><a href="a-better-solution-to-coding-standards">A better solution to coding standards</a></li><li><a href="php-autoloaders-should-not-be-case-sensitive">PHP Autoloaders should not be case sensitive</a></li><li><a href="php-psr-0-pretty-shortsighted-really">PHP: PSR-0: Pretty Shortsighted, Really</a></li><li><a href="php-find-every-combination">Find every combination of an array</a></li><li><a href="why-no-comments">Why I don't have a comments section</a></li></ul></div></section></article><form action="contactx.php" method="POST" class="akbar"><label>Name</label><input type="text" name="name"/><label>Email</label><input type="text" name="email"/><label>Comments</label><textarea name="comments">

	</textarea><input type="submit" value="submit" name="submit"/></form>
	

		</main>
		
			<nav id="code">
				<h1>Code</h1>
				<a href="#" title="close"></a>
				<section>
					<a href="/transphporm-php-templates">
						<h2>Transphporm</h2>
						<p>Transphporm is a novel templating engine that takes a completely different approach to others. Transphporm uses a CSS like syntax to allow writing content to any element on the page.</p>

						<p>This TSS (transformation style-sheet):</p>
						<code>h1 {
	content: "Header changed";
}</code>
						<p>Is applied to an HTML document:</p>
						<code>&lt;h1&gt;Sample heading...&lt;/h1&gt;</code>

						<p>And results in:</p>
						<code>&lt;h1&gt;Header Changed&lt;/h1&gt;</code>

						<p>Transphporm supports content replacement, conditional logic, loops, caching and data formatting.</p>
					</a>

				</section>

				<section>
					<a href="/dice">
						<h2>Dice</h2>
						<p>Dice is a rule based Dependency Injection Container with autowiring:</p>

						<code>$foo = new Foo(new Bar(new Baz));</code>

						<p>Becomes: </p>
						<code>$foo = $dice->create('Foo');</code>

						<p>Dice automatically works out the dependencies required to construct an object. It's also fast and lightweight.</p>

					</a>
				</section>


				<section>
					<a href="/introduction-to-maphper">
						<h2>Maphper</h2>
						<p>Maphper is an ORM with a focus on simplicity and ease of use. You can replace the entire ORM with an array.</p>

						<p>Equivalent of <code class="inline">SELECT * FROM users WHERE id = 123</code>:</p>
						<code>$user = $users[123]</code>

						<p>Run an insert/update query:</p>
						<code>$users[] = ['id' => 1, 'name' => 'Tom'];</code>

						<p>You can loop through a set of users as if the mapper is an array:</p>

						<code>foreach ($users as $user) {
	echo $user->name;
}</code>

						<p>It also handles relationships and is designed so that the mappers do not need to map to an SQL database</p>

					</a>
				</section>


				<section>
					<h2>Other</h2>
					<ul>
						<li><a href="/nof5">NoF5 - Never press reload again!</a></li>
						<li><a href="/css3-in-ie">CSS3 in Internet Explorer (deprecated)</a></li>
					</ul>

				</section>
			</nav>

			<nav id="articles">
				<h1>Articles</h1>
				<a href="#"></a>
				<section>
					<h2>Model View Controller (MVC)</h2>

					<h3>Model-View-Confusion</h3>

					<ol>
							<li><a href="/views-are-not-templates">The View gets its own data from the Model</a></li>
							<li><a href="/view-helpers">MVC Models are not Domain Models</a></li>
						</ol>

					<h3>Immutable MVC</h3>
					<ol>
						<li><a href="/immutable-mvc-in-php">Immutable MVC: MVC In PHP 2019 Edition (Part 1)</a></li>
						<li><a href="/immutable-mvc-crud-application">Immutable MVC in PHP (Part 2) - Immutable CRUD application</a></li>
					</ol>

					<h3>MVC in PHP series</h3>

					<ol>
						<li><a href="/mvc-in-php">Hello World</a></li>
							<li><a href="/mvc-tutorial-real-application-example">Real world example (part 1)</a></li>
							<li><a href="/mvc-php-front-controller">Deploying MVC on the web</a></li>
							<li><a href="/mvc-php-router-dependency-injection">Create a router using Dependency Injection</a></li>
						</ol>

					<h3>MVVM</h3>
						<ol><li><a href="/evolving-mvc-into-mvvm">MVVM, MVC it's all just roman numerals to me</a></li></ol>

				</section>

				<section>
					<h2>Best Practices</h2>
					<h3>Conceptual discussions</h3>
					<ol>
						<li><a href="/immutability-encapsulation-schrodingers-immutability">Immutability vs Encapsulation: Schrödinger's immutability</a></li>
						<li><a href="/encapsulation-dont-look-up">Encapsulation: Don't Look Up</a></li>
						<li><a href="/this-keyword-isnt-oop">The $this variable isn't as Object-Oriented as you think it is</a></li>
						<li><a href="/creative-ways-of-breaking-encapsulation">Finding creative ways to break encapsulation isn't clever</a></li>
						<li><a href="/slutty-software-tight-and-loose-coupling">Slutty Software is good software: Tight and loose coupling in OOP</a></li>
					</ol>



					<h3>Evil things</h3>
					<ol>
						<li><a href="/php-annotations-are-an-abomination">PHP: Annotations are an abomination</a></li>
						<li><a href="/empty-interfaces-bad-practice">Empty interfaces are bad practice</a></li>
						<li><a href="/sprintf">Stop the sprinf() abuse</a></li>
						<li><a href="/constructor-injection-vs-setter-injection">Constructor Injection vs Setter Injection</a></li>
						<li><a href="/you-do-not-need-inheritance-oop">Inheritance vs Composition: Composition wins by knockout</a></li>
						<li><a href="/oop-courier-anti-pattern">The "courier" anti-pattern.</a></li>
						<li><a href="/static-methods-bad-practice">Are Static Methods/Variables bad practice?</a></li>
					</ol>
				</section>


				<section>
					<h2>Put the pro in programmer</h2>

					<ul>
						<li><a href="/become-a-better-programmer">A guide to writing better code</a></li>
						<li><a href="/hazard-1-90-percent-of-everything-is-crap">Hazard 1: 90% of everything is crap</a></li>
						<li><a href="/hazard-2-but-ive-always-done-it-this-way">Hazard 2: I've always done it that way</a></li>
						<li><a href="/hazard-3-cool">Hazard 3: COOL!</a></li>
						<li><a href="/hazard-4-you-are-not-clairvoyant">Hazard 4: You are not clairvoyant</a></li>
					</ul>
				</section>

				<section>
					<h2>Test Driven Development (TDD)</h2>
					<ul>
						<li><a href="/to-assert-or-not-assert">To assert or not assert, that is the question.</a></li>
						<li><a href="/4-reasons-to-avoid-foreign-key-constraints-database-logic">4 reasons you should not have logic in your database (cascade delete, foreign key constraints, triggers, etc) </a></li>
					</ul>
				</section>
				<section>
					<h2>Server Administration</h2>
						<ul>
							<li><a href="/11-things-you-forgot-server-setup">11 things you may have overlooked when you made your website live</a></li>
							<li><a href="vje-docker-virtual-server">v.je - an Easy to set up development environment for Docker</a></li>
							<li><a href="why-are-you-still-using-xampp">Why are you still using XAMPP?</a></li>
							<li><a href="/dont-ditch-centos-yet">It's probably not time ditch CentOS for your server</a></li>
							<li><a href="/http2-push-cache-css-reload">Forcing a browser CSS cache reload with HTTP/2 Server Push</a></li>
							<li><a href="/eliminate-render-blocking-css-pagespeed">Eliminate Render Blocking CSS using HTTP/2 Push</a></li>
							<li><a href="/openvpn-nat">Routing all traffic through an OpenVPN client on a CentOS 7 NAT</a></li>
							<li><a href="/guide-lets-encrypt-certificate-for-local-development">Guide: Using Let's Encrypt SSL Certificates for local or network server</a></li>
						</ul>
				</section>

				<section>
					<h2>Programming Philosophy</h2>
						<ul>
							<li><a href="/is-programming-art">Is programming an art form?</a></li>
							<li><a href="/importance-of-correct-terminology">The importance of getting terminology correct</a></li>
							<li><a href="/single-responsibility-principle-how-to-apply">SoCcam's Razor: Applying the Single Responsibility Principle using a practical approach</a></li>
						</ul>
				</section>
				<section>
					<h2>Other</h2>
					<ul>
							<li><a href="/php-mysql-novice-to-ninja">PHP &amp; MySQL - Novice to Ninja, now available!</a></li>
							<li><a href="/google-analytics-costing-you-sales">Google Analytics And Fonts Are Probably Costing You In Lost Sales</a></li>
							<li><a href="/vje-minimal-virtual-server">v.je - A 97mb Minimal web development virtual machine</a></li>
							<li><a href="/a-better-solution-to-coding-standards">A better solution to coding standards</a></li>


							<li><a href="/php-autoloaders-should-not-be-case-sensitive">PHP Autoloaders should not be case sensitive</a></li>
							<li><a href="/php-psr-0-pretty-shortsighted-really">PHP: PSR-0: Pretty Shortsighted, Really</a></li>
							<li><a href="/php-find-every-combination">Find every combination of an array</a></li>
							<li><a href="/why-no-comments">Why I don't have a comments section</a></li>
							<li><a href="/php-explode-split-with-escape-character">Split/explode a string in PHP with an escape character</a></li>
							<li><a href="/git-forked-goodbye-github">Git Forked: Goodbye GitHub, you'll be briefly missed</a></li>
							<li><a href="/git-forked-decentralised-ecosystem">Git Forked: The decentralised but better connected git ecosystem I'd like to see</a></li>
							<li><a href="/transphporm-caching-guide">A guide to Transphporm's caching implementation</a></li>
							<li><a href="/sendmail-php-docker">How to get sendmail working in docker PHP</a></li>
						</ul>
				</section>
			</nav>
			
		<footer>
			<section>
				<h2>About the author</h2>
				<img src="/me.jpg" alt="Tom Butler - Web Developer" width="190" height="261" />
				<p>
					All content is by <a href="/about" rel="author">Dr. Tom Butler</a>, Web Developer and University Lecturer based in Milton Keynes, UK. Interests: Programming, best practices, PC gaming, PC hardware and seeing live music.
				</p>

			</section>

			<section>
				<h2>Yell at me</h2>

				<p>Want to discuss one of the articles here? Head over to <a href="https://gitter.im/Tom-Butler-PHP/community">my Gitter chat</a> or you can <a href="/contact">contact me directly.</a></p>
			</section>

			<section>
				<h2>Latest updates</h2>
				<ol class="latest">
						<li>09/07/2024 - <a href="/evict-your-darlings">Evict Your Darlings: Banish dotfiles from your home directory</a></li>
						<li>12/04/2021 - <a href="/vje-docker-virtual-server">v.je - an Easy to set up development environment for Docker</a></li>
						<li>12/04/2021 - <a href="/why-are-you-still-using-xampp">Why are you still using XAMPP?</a></li>
						<li>03/02/2021 - <a href="https://www.sitepoint.com/docker-php-development-environment/">Setting Up a Modern PHP Development Environment with Docker (via SitePoint)</a></li>
						<li>20/12/2020 - <a href="/dont-ditch-centos-yet">It's probably not time ditch CentOS for your server</a></li>
						<li>23/04/2020 - <a href="/sendmail-php-docker">How to get sendmail working in docker PHP</a></li>
						<li>08/03/2020 - <a href="/11-things-you-forgot-server-setup">11 things you may have overlooked when you made your website live</a></li>
						<li>17/03/2019 - <a href="/eliminate-render-blocking-css-pagespeed">Eliminate Render Blocking CSS using HTTP/2 Push</a></li>
						<li>17/03/2019 - <a href="/http2-push-cache-css-reload">Forcing a browser CSS cache reload with HTTP/2 Server Push</a></li>
						<li>10/03/2019 - <a href="/immutable-mvc-crud-application">Immutable MVC in PHP (Part 2) - Immutable CRUD application</a></li>
						<li>20/02/2019 - <a href="/immutable-mvc-in-php">Immutable MVC: MVC In PHP 2019 Edition (Part 1)</a></li>
						<li>13/11/2018 - <a href="/guide-lets-encrypt-certificate-for-local-development">Guide: Using Let's Encrypt SSL Certificates for local or network server</a></li>
				</ol>
			</section>
			<section>

				<h2>Top articles</h2><ul><li>Model-View-Confusion
				<ol><li><a href="views-are-not-templates">The View gets its own data from the Model</a></li><li><a href="view-helpers">MVC Models are not domain models</a></li></ol>

			</li><li>
				MVC In PHP
				<ol><li><a href="immutable-mvc-in-php">Immutable MVC: MVC In PHP 2019 Edition (Part 1)</a></li><li><a href="immutable-mvc-crud-application">Immutable MVC in PHP (Part 2) - Immutable CRUD application</a></li><li><a href="mvc-in-php">Hello World</a></li><li><a href="mvc-php-front-controller">Deploying MVC on the web</a></li><li><a href="mvc-php-router-dependency-injection">Using a Dependency Injection Container to simplify Routing in an MVC framework</a></li></ol>
			</li></ul>

			</section>

			<section>
				<h2>PHP &amp; MySQL: Novice to Ninja</h2>

				<a href="/php-mysql-novice-to-ninja">
					<img src="/img/ninja.png" alt="PHP &amp; MySQL: Novice to Ninja" width="250" height="329" />
				</a>
				<p><a href="/php-mysql-novice-to-ninja">Available now!</a></p>

			</section>
			<section>
				<h2>More...</h2>
				<ul>
					<li><a href="/">Home</a></li>
					<li><a href="/about">About me</a></li>
					<li><a href="/publications">Publications</a></li>
					<li><a href="/contact">Contact</a></li>
				</ul>
			</section>
		</footer>
    
        
	</body>
</html>

Gestion des entetes

  • 15/11/2025 10:49:11
  • Recherche du Favicon

  • favicon => (0)<=
  • Mise à jour du favicon
    FAVICON:

    Recherche Balises Title + Metas...

    Recherche du Titre

    TITLE:
    Tom's PHP programming blog

  • 15/11/2025 10:49:11
  • Recherche du Titre1

    Balise H1:
    Tom Butler's programming blog

    Recherche META Description de la page

  • Trouvé au moins une balise meta
  • META DESCRIPTION:
    tom butler's programming blog - mvc in php, best practices, separation of concerns


    Indexing(428510)

    ici 15/11/2025 10:49:11 428510
  • SELECT titre,description,keywords,boost FROM domaines with(nolock) WHERE id=428510
  • decortiquer(Tom's PHP programming blog,428510)

    decortiquer_cleaner(Tom's PHP programming blog)
    decortiquer_cleaner(Tom s PHP programming blog)
    TITLE
    N°MotRésultat
    0Tom
    2PHP
    3programming
    4blog

    decortiquer(tom butler's programming blog - mvc in php, best practices, separation of concerns,428510)

    decortiquer_cleaner(tom butler's programming blog - mvc in php, best practices, separation of concerns)
    decortiquer_cleaner(tom butler s programming blog {tiret} mvc in php {virgule} best practices {virgule} separation of concerns)
    DESCRIPTION
    N°MotRésultat
    0tom
    1butler
    3programming
    4blog
    5{tiret}
    6mvc
    7inKO (stop word)
    8php
    9{virgule}
    10best
    11practices
    12{virgule}
    13separation
    14ofKO (stop word)
    15concerns

    (keywords)(boost)


    56637 session(s) actives



    Wopa! © novembre 2025 | RSS | Publicité | Alphabet | Communes | Extensions internet par Pays Contact